ваша структура верна. то, что вы ищете, это том , чтобы сделать ваш проект django на хосте доступным внутри контейнера, вы можете создать все, что вам нравится в вашем проекте, и изменения вступят в силу для контейнера.
например:
структура:
.
├── django
│ ├── Dockerfile
│ └── entireDjangoAppFiles
└── docker-compose.yml
скажи, что это мой django dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
RUN pip install Django psycopg2
EXPOSE 8000
CMD python manage.py runserver 0.0.0.0:8000
и мой докер сочиняет:
version: '3.7'
services:
django:
build:
context: django
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- "./django:/code"
теперь любые изменения, которые я делаю в моей директории django, будут применяться и к /code
dir контейнера
EDIT
наши файлы docker-compose не похожи ... вы используете именованные тома
вместо обычного монтажа. эти тома создаются собственной папкой томов Docker, и контейнеры могут их использовать, но ничто не говорит Docker, что вы хотите, чтобы эти тома содержали ваши приложения - поэтому они пусты. чтобы исправить это, вы можете просто удалить их из опции volumes
в вашем docker-compose и предпочесть mount-volume:
version: '3.7'
services:
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
- redis:redis
volumes:
- .web:/usr/src/app #mount the project dir
- .path/to/static/files/dir:/usr/src/app/static #mount the static files dir
env_file: .env
environment:
DEBUG: 'true'
command: /usr/local/bin/gunicorn docker_django.wsgi:application -w 2 -b :8000
nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
volumes:
- web-static:/usr/src/app/static
links:
- web:web
postgres:
restart: always
image: postgres:latest
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data/
pgadmin:
restart: always
image: fenglc/pgadmin4
ports:
- "5050:5050"
volumes:
- pgadmindata:/var/lib/pgadmin/data/
environment:
DEFAULT_USER: 'pgadmin4@pgadmin.org'
DEFAULT_PASSWORD: 'admin'
redis:
restart: always
image: redis:latest
ports:
- "6379:6379"
volumes:
- redisdata:/data
volumes:
#web-django:
#web-static:
pgdata:
redisdata:
pgadmindata:
примечание о других именованных томах - если вам интересно, зачем вам их использовать - это тома баз данных, которые должны быть заполнены контейнерами.