Как заставить Docker писать в локальный каталог?

2726
futuraprime

Я пытаюсь настроить сайт трясогузки (расширение django, http://wagtail.io/ ) с помощью Docker, и он, кажется, сработал, но, насколько я могу судить, он спрятал сайт от меня где-то в недрах Докера, и я не могу на самом деле работать с ним.

Мой каталог настроен так:

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

Мой докер-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 

Мой 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/ 

и когда я запускаю это ...

$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 

(В первый раз, когда я запустил его, он "работал" отлично.)

Где эти мистические файлы, которые он создал, и как мне их очистить и заставить работать с каталогом, который я могу видеть / редактировать?


РЕДАКТИРОВАТЬ: Этот подход основан на примере Django в документации Докера ( https://docs.docker.com/compose/django/ ). Я попробовал этот пример (используя файлы дословно), и у меня та же проблема:

$ 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 

Но никакой composeexampleкаталог не был создан (вопреки тому, что в документах сказано, что этот каталог теперь должен выглядеть):

$ 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 

Но докер все еще кажется убежденным, что все работает; так эти файлы ... где-то?

$ 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
Вы можете использовать «docker inspect» для просмотра пути к фактическому расположению томов и корневого каталога, но вы, вероятно, не захотите изменять эти каталоги напрямую, так как они управляются Docker. Lie Ryan 8 лет назад 0

1 ответ на вопрос

1
Antoine Coetsier

To get access to those files you either need:

Ну, хорошо, но в принципе есть способ, чтобы документы появлялись вне контейнера, да? Согласно учебному пособию, оно должно было поместить приложение scaffolded django в новую папку в каталоге проекта (вне докера), что мне и нужно, вместо того, чтобы оно было доступно только при входе в контейнер. futuraprime 8 лет назад 0
Как и предлагается, после запуска контейнера с подключенными томами контейнер может читать / писать по желанию Scott Stensland 8 лет назад 0
Контейнер может быть в состоянии, но, опять же, файлы не доступны за пределами контейнера, где документы предполагают, что они должны быть. Следующая строка руководства говорит мне: «В каталоге вашего проекта отредактируйте файл` composeexample / settings.py`. " Я не могу этого сделать, потому что предыдущий шаг, который должен был добавить их в каталог моего проекта, этого не сделал. Если я создаю их сам, это не поможет, так как docker выдает ошибку, а не перезаписывает файлы внутри контейнера файлами из моего каталога проекта. futuraprime 8 лет назад 0
Разве директива `volume` в` docker-compose.yml` отличается от строки `volume`, которую я уже имею в этом файле? futuraprime 8 лет назад 0