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

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

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 composeexampleVerzeichnis 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 ADDnur lokale Dateien in den Containerhttps://docs.docker.com/engine/reference/builder/#addaber die Containerdateien sind für Ihren Host nicht sichtbar. Fügen Sie die volumeOption zu Ihrer Datei docker-compose.yml hinzuhttps://docs.docker.com/compose/compose-file/#volumes-volume-driver

  • um 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
    

verwandte Informationen