Wie kann ich Docker dazu bringen, in ein lokales Verzeichnis zu schreiben?

2925
futuraprime

Ich versuche, eine Wagtail- Site (eine Django-Erweiterung, http://wagtail.io/ ) mit Docker zu erstellen, und es scheint funktioniert zu haben, aber soweit ich das beurteilen kann, hat sie die Site irgendwo versteckt in den Eingeweiden von Docker und ich kann damit eigentlich nicht arbeiten.

Mein Verzeichnis ist wie folgt eingerichtet:

dir |- docker-compose.yml |- web |- Dockerfile |- requirements.txt 

Mein docker-compose.yml

version: '2' services: db: restart: always image: postgres web: build: ./web command: python3 manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db restart: always 

Meine Dockerfile:

FROM python:3.5 MAINTAINER  RUN apt-get update -y  ENV PYTHONBUFFERED 1  RUN mkdir /code WORKDIR /code  ADD requirements.txt /code/  RUN pip3 install -r requirements.txt  ADD . /code/ 

und wenn ich es laufen lasse ...

$docker-compose run web wagtail start site . Building web Step 1 : FROM python:3.5 ---> 64869b3b2083 Step 2 : MAINTAINER  ---> Using cache ---> 2a539247021e Step 3 : RUN apt-get update -y ---> Using cache ---> 6d1094098071 Step 4 : ENV PYTHONBUFFERED 1 ---> Using cache ---> 12a153c417cd Step 5 : RUN mkdir /code ---> Using cache ---> 4cc21041c1c8 Step 6 : WORKDIR /code ---> Using cache ---> eaca96927442 Step 7 : ADD requirements.txt /code/ ---> Using cache ---> 2f1977d72542 Step 8 : RUN pip3 install -r requirements.txt ---> Using cache ---> a73e7640aa35 Step 9 : ADD . /code/ ---> 31bd3c0432cd Removing intermediate container 66e4fa5b074f Successfully built 31bd3c0432cd Creating a wagtail project called site CommandError: /code/requirements.txt already exists, overlaying a project or app into an existing directory won't replace conflicting files 

(Beim ersten Mal "funktionierte" es einwandfrei.)

Wo werden diese mystischen Dateien erstellt und wie lösche ich sie und mache es mit einem Verzeichnis, das ich tatsächlich sehen / bearbeiten kann?


BEARBEITEN: Dieser Ansatz basiert auf dem Django-Beispiel in Dockers Dokumenten ( https://docs.docker.com/compose/django/ ). Ich habe dieses Beispiel ausprobiert (mit den Dateien wörtlich) und habe das gleiche Problem:

$ docker-compose run web django-admin.py startproject composeexample . Creating network "dockerdjangotest_default" with the default driver Creating dockerdjangotest_db_1 Building web Step 1 : FROM python:2.7 2.7: Pulling from library/python efd26ecc9548: Already exists a3ed95caeb02: Pull complete d1784d73276e: Already exists 72e581645fc3: Already exists 9709ddcc4d24: Already exists 2d600f0ec235: Already exists de1491f1bbd4: Pull complete 4becc568d2ff: Pull complete Digest: sha256:ee46fc8b96ed0d1f1af71d0859ce6ba5f9be3b587f5a608193599b48d0a157c2 Status: Downloaded newer image for python:2.7 ---> a3b29970a425 Step 2 : ENV PYTHONUNBUFFERED 1 ---> Running in 35a6721182b3 ---> d8424740fce4 Removing intermediate container 35a6721182b3 Step 3 : RUN mkdir /code ---> Running in d1c7e92821ab ---> 1c0b1da9e9d3 Removing intermediate container d1c7e92821ab Step 4 : WORKDIR /code ---> Running in 120bb2d0e5dd ---> 72725e994f0e Removing intermediate container 120bb2d0e5dd Step 5 : ADD requirements.txt /code/ ---> ef891d60690b Removing intermediate container 862a5e314f2f Step 6 : RUN pip install -r requirements.txt ---> Running in f51b2bc2ca48 Collecting Django (from -r requirements.txt (line 1)) Downloading Django-1.9.5-py2.py3-none-any.whl (6.6MB) Collecting psycopg2 (from -r requirements.txt (line 2)) Downloading psycopg2-2.6.1.tar.gz (371kB) Building wheels for collected packages: psycopg2 Running setup.py bdist_wheel for psycopg2: started Running setup.py bdist_wheel for psycopg2: finished with status 'done' Stored in directory: /root/.cache/pip/wheels/e2/9a/5e/7b620848bbc7cfb9084aafea077be11618c2b5067bd532f329 Successfully built psycopg2 Installing collected packages: Django, psycopg2 Successfully installed Django-1.9.5 psycopg2-2.6.1 ---> 349d20d9823e Removing intermediate container f51b2bc2ca48 Step 7 : ADD . /code/ ---> 38190d0f4c65 Removing intermediate container 0da1169b5cfa Successfully built 38190d0f4c65 

Es wurde jedoch kein composeexampleVerzeichnis erstellt (anders als in den Dokumenten angegeben, dass dieses Verzeichnis jetzt aussehen sollte):

$ ls -l total 24 -rw-r--r-- 1 user wheel 146 Apr 17 17:50 Dockerfile -rw-r--r-- 1 user wheel 209 Apr 17 17:51 docker-compose.yml -rw-r--r-- 1 user wheel 16 Apr 17 17:50 requirements.txt 

Aber Docker scheint immer noch überzeugt zu sein, dass alles funktioniert hat. also sind diese dateien ... irgendwo?

$ docker-compose run web django-admin.py startproject composeexample . CommandError: /code/manage.py already exists, overlaying a project or app into an existing directory won't replace conflicting files 
3
Sie können "Docker Inspect" verwenden, um den Pfad zum tatsächlichen Speicherort der Volumes und des Stammverzeichnisses anzuzeigen, aber Sie möchten diese Verzeichnisse wahrscheinlich nicht direkt ändern, da sie vom Docker verwaltet werden. Lie Ryan vor 8 Jahren 0

1 Antwort auf die Frage

1
Antoine Coetsier

To get access to those files you either need:

Ok, aber im Prinzip gibt es eine Möglichkeit, die Dokumente außerhalb des Containers erscheinen zu lassen, ja? Laut Tutorial sollte es die gerüstete Django-App in einem neuen Ordner im Projektverzeichnis (außerhalb des Dockers) abgelegt haben, was ich will, anstatt sie nur über den Container zugänglich zu haben. futuraprime vor 8 Jahren 0
Wie vorgeschlagen, kann der Container nach dem Starten des Containers mit angehängten Volumes nach Belieben lesen / schreiben Scott Stensland vor 8 Jahren 0
Möglicherweise ist der Container in der Lage, aber auf die Dateien kann nicht außerhalb des Containers zugegriffen werden, wo die Dokumente dies vorschlagen. In der nächsten Zeile des Tutorials wird angezeigt: "Bearbeiten Sie in Ihrem Projektverzeichnis die Datei" composeexample / settings.py ". Ich kann das nicht tun, weil der vorherige Schritt, der diese in mein Projektverzeichnis aufnehmen sollte, nicht funktioniert hat. Wenn ich sie selbst erstelle, hilft das nicht, da das Andockfenster einen Fehler ausgibt, anstatt die Dateien innerhalb des Containers mit Dateien aus meinem Projektverzeichnis zu überschreiben. futuraprime vor 8 Jahren 0
Unterscheidet sich die `volume`-Direktive in` docker-compose.yml` von der `volume`-Zeile, die ich bereits in dieser Datei habe? futuraprime vor 8 Jahren 0