2015-07-16 5 views
7

Ich benutze Docker-Compose, um eine portable Entwicklungsumgebung für eine Reihe von Symfony2-Anwendungen einzurichten (obwohl nichts, was ich tun möchte, ist spezifisch für Symfony). Ich habe beschlossen, die Quelldateien auf dem lokalen Computer als Datenvolume mit allen anderen Abhängigkeiten in Docker verfügbar zu machen. Auf diese Weise können Entwickler auf dem lokalen Dateisystem bearbeiten.Docker Berechtigungen Entwicklungsumgebung mit einem Host gemountetes Volume

Alles funktioniert gut, außer dass nach dem Ausführen der App meine Cache- und Protokolldateien und die Dateien, die von Composer im Verzeichnis/vendor erstellt wurden, jetzt im Besitz von root sind.

Ich habe hier über dieses Problem und einige mögliche Ansätze lesen:

Changing permissions of added file to a Docker volume

Aber ich kann nicht ganz recht herauszukitzeln, welche Änderungen ich in meinem Docker-compose.yml Datei machen, so Wenn mein Symphony-Container mit docker-komponiert beginnt, haben alle erstellten Dateien die Berechtigungen des Benutzers auf dem Hostcomputer.

ich die Datei als Referenz bin Entsendung, Arbeiter ist, wo PHP usw. leben:

source: 
    image: symfony/worker-dev 
    volumes: 
    - $PWD:/var/www/app 
mongodb: 
    image: mongo:2.4 
    ports: 
    - "27017:27017" 
    volumes_from: 
    - source 
worker: 
    image: symfony/worker-dev 
    ports: 
    - "80:80" 
    - mongodb 
    volumes_from: 
    - source 
    volumes: 
    - "tmp/:/var/log/nginx" 

Antwort

2

Eine der Lösungen ist die Befehle innerhalb Containers execure. Ich habe mehrere Problemumgehungen für dasselbe Problem versucht, mit dem ich in der Vergangenheit konfrontiert wurde. Ich finde die Ausführung des Befehls innerhalb des Containers am benutzerfreundlichsten.

Beispielbefehl: docker-compose run CONTAINER_NAME php bin/console cache:clear. Sie können make, ant oder ein modernes Werkzeug verwenden, um die Befehle kurz zu halten.

Beispiel mit Makefile:

all: | build run test 

build: | docker-compose-build 
run: | composer-install clear-cache 

############## docker compose 

docker-compose-build: 
     docker-compose build 

############## composer 

composer-install: 
     docker-compose run app composer install 

composer-update: 
     docker-compose run app composer update 

############## cache 

clear-cache: 
     docker-compose run app php bin/console cache:clear 

docker-set-permissions: 
     docker-compose run app chown -R www-data:www-data var/logs 
     docker-compose run app chown -R www-data:www-data var/cache 

############## test 

test: 
     docker-compose run app php bin/phpunit 

Alternativ können Sie eine .env Datei einzuführen, die eine Umgebungsvariablen enthält und dann Benutzer eine der Variablen usermod Befehl im Docker Behälter laufen.

Verwandte Themen