5

Ich benutze docker-machine und docker-compose, um eine Django-App mit React-Frontend zu entwickeln. Die Volumes werden nicht in der Debian-Umgebung gemountet, funktionieren aber unter OSX und Windows. Ich habe seit Tagen mit diesem Problem zu kämpfen. Ich habe eine Light-Version meines Projekts erstellt, die das Problem reproduziert. Sie finden es unter https://github.com/firetix/docker_bug. mein Docker-compose.yml:Host-Volumes Werden nicht auf 'Docker-komponiert' gestellt

django: 
    build: django 
    volumes: 
     - ./django/:/home/docker/django/ 

Mein Dockerfile ist als

FROM python:2.7 
RUN mkdir -p /home/docker/django/ 
ADD . /home/docker/django/ 
WORKDIR /home/docker/django/ 
CMD ["./command.sh"] 

folgen Wenn ich Docker-compose laufen bauen alles richtig funktioniert. Aber wenn ich laufe Docker-komponieren bis ich

[8] System error: exec: "./command.sh": stat ./command.sh: no such file or directory 

fand ich diese Frage auf Stackoverflow How to mount local volumes in docker machine folgte die vorgeschlagenen Abhilfen ohne Erfolg.

Ich mache ich etwas falsch? Warum funktioniert das bei OSX und Windows, aber nicht bei Debian? Gibt es eine Problemumgehung, die in einer Debian-Umgebung funktioniert? Sowohl Osx als auch Debian haben/Users/Ordner als freigegebenen Ordner, wenn ich die GUI von VirtualBox überprüfe.

+0

ich diese Github Probleme gefunden, dass ich denke https://github.com/docker/machine/issues/179 –

Antwort

1

Dies sollte nicht für Sie auf OSX, aber auch Debian allein funktionieren. Hier ist warum:

Wenn Sie ./command.sh zu dem Volume /home/docker/django/django/ hinzufügen, wird das Image ordnungsgemäß erstellt, mit der Datei im richtigen Verzeichnis. Wenn Sie jedoch den Container "up" verwenden, wird Ihr lokales Verzeichnis "über" dem im Verzeichnis erstellten erstellt. So gibt es nichts mehr gibt ...

Ich empfehle command.sh an einen anderen Ort hinzufügen, beispielsweise /opt/django/ oder so etwas, und das Ändern Ihrer Docker Befehl ./opt/command.sh.

Oder einfacher, so etwas wie dies, hier ist der vollständige Code:

# Dockerfile 
FROM python:2.7 
RUN mkdir -p /home/docker/django/ 
WORKDIR /home/docker/django/ 

# docker-compose.yml 
django: 
    build: django 
    command: ./command.sh 
    volumes: 
     - ./django/:/home/docker/django/ 
+0

nicht sicher, dass dies wahr ist verwandt ist, Getestet habe ich es nur auf OSX el capitain Docker v 1.9. 0, docker-compose 1.5.0 und es funktioniert, weil Mounting auf "Top of" sollte mit lokalen Dateien command.sh überschreiben, nicht ein leeres Volume mounten. In OSX überschreibt es die Datei, aber auf Debian bekomme ich immer noch die Fehlerdatei command.sh nicht gefunden. Ich habe auch versucht, command.sh in einen Ordner zu verschieben, nicht mounted/opt/immer noch das gleiche Problem. @ Brandon danke für die Antwort! –

+0

Soweit ich weiß, müssen direkte Host-Volumes in absoluter Weise geschrieben werden (dafür können '$ {PWD}' env-Variablen verwendet werden. – BlackStork

0

Ich glaube, das sollte funktionieren. Es gab einige Probleme mit Docker-Compose-Versionen mit relativen Pfaden.

django: 
    build: django 
    volumes: 
    - ${PWD}/django:/home/docker/django