wagtail(django 확장 프로그램,http://wagtail.io/) 사이트가 Docker를 사용하여 작동하는 것 같지만 제가 알 수 있는 한 이 사이트는 Docker 내부 어딘가에 숨겨져 있어서 실제로 작업할 수 없습니다.
내 디렉토리는 다음과 같이 설정됩니다.
dir
|- docker-compose.yml
|- web
|- Dockerfile
|- requirements.txt
내 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
내 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
(처음 실행했을 때 완벽하게 "작동"했습니다.)
생성된 신비로운 파일은 어디에 있으며, 어떻게 삭제하고 실제로 보거나 편집할 수 있는 디렉터리에서 작동하게 만들 수 있나요?
편집: 이 접근 방식은 Docker 문서의 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는 여전히 모든 것이 작동한다고 확신하는 것 같습니다. 그럼 그 파일들은... 어딘가에 있는 걸까요?
$ 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
답변1
해당 파일에 액세스하려면 다음 중 하나가 필요합니다.
호스트를 통해 파일에 액세스할 수 있도록 볼륨이 있는 컨테이너를 시작합니다. 현재
ADD
명령이 포함된 dockerfile은 로컬 파일만 컨테이너에 푸시합니다.https://docs.docker.com/engine/reference/builder/#add하지만 컨테이너 파일은 호스트에 표시되지 않습니다.volume
docker-compose.yml 파일에 옵션을 추가하세요.https://docs.docker.com/compose/compose-file/#volumes-volume-driver컨테이너에 대화형으로 연결하고 영구적으로 필요하지 않은 경우 파일을 찾아봅니다.
docker exec -it <containerIdOrName> bash