Ich versuche, eine Wagtail einzurichten (eine Django-Erweiterung,http://wagtail.io/)-Site mit Docker, und es scheint funktioniert zu haben, aber soweit ich das beurteilen kann, hat es die Site irgendwo in den Eingeweiden von Docker vor mir versteckt, und ich kann nicht wirklich damit arbeiten.
Mein Verzeichnis ist folgendermaßen aufgebaut:
dir
|- docker-compose.yml
|- web
|- Dockerfile
|- requirements.txt
Meine 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
Mein 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 ausführe ...
$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
(Als ich es das erste Mal ausführte, „funktionierte“ es perfekt.)
Wo sind diese mystischen Dateien, die es erstellt hat, und wie lösche ich sie und bringe es mit einem Verzeichnis zum Laufen, das ich tatsächlich sehen/bearbeiten kann?
BEARBEITEN: Dieser Ansatz basiert auf dem Django-Beispiel in den Docker-Dokumenten (https://docs.docker.com/compose/django/). Ich habe dieses Beispiel ausprobiert (die Dateien wortwörtlich verwendet) 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 composeexample
Verzeichnis erstellt (im Gegensatz zu dem, was in der Dokumentation steht, wie 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 davon ü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
Antwort1
Um Zugriff auf diese Dateien zu erhalten, benötigen Sie entweder:
um den Container mit einem Volume zu starten, damit Sie über den Host auf die Dateien zugreifen können. Ihr Dockerfile mit der Anweisung überträgt derzeit
ADD
nur lokale Dateien in den Containerhttps://docs.docker.com/engine/reference/builder/#addaber die Containerdateien sind für Ihren Host nicht sichtbar. Fügen Sie dievolume
Option zu Ihrer Datei docker-compose.yml hinzuhttps://docs.docker.com/compose/compose-file/#volumes-volume-driverum sich interaktiv mit dem Container zu verbinden und dort die Dateien zu durchsuchen, wenn Sie diese nicht dauerhaft benötigen.
docker exec -it <containerIdOrName> bash