В этом файле docker-compose.yml
есть много, но большая его часть не нужна. expose:
в Dockerfile почти ничего не делает; links:
не нужны в текущей сетевой системе; Compose предоставляет сеть default
для вас; ваш volumes:
попытается вставить код в контейнер, который уже должен присутствовать на изображении. Если вы очистите все это, единственная часть, которую вы действительно хотите повторно использовать из одного контейнера в другой, это его build:
(или image:
), и в этот момент синтаксис привязки YAML не нужен.
Этот docker-compose.yml
должен быть функционально эквивалентен тому, что показано в вопросе:
version: '3'
services:
python-api:
build:
context: /Users/AjayB/Desktop/python-api/
ports:
- "8000:8000"
# No networks:, use `default`
# No expose:, use what's in the Dockerfile (or nothing)
depends_on:
- python-model
# No volumes:, use what's in the Dockerfile
# No environment:, this seems to be a required setting in the Dockerfile
# No command:, use what's in the Dockerfile
python-model:
build:
context: /Users/AjayB/Desktop/Python/python/
ports:
- "8001:8001"
python-celery:
build: # copied from python-api
context: /Users/AjayB/Desktop/python-api/
depends_on:
- redis
command: celery -A server worker -l info # one line, no sh -c wrapper
redis:
image: redis:5.0.8-alpine
# No hostname:, it doesn't do anything
ports:
- "6379:6379"
# No command:, use what's in the image
Опять же, обратите внимание, что единственное, что мы фактически скопировали из контейнера python-api
в python-celery
контейнер - это блок build:
; все остальные параметры, которые будут совместно использоваться двумя контейнерами (код, открытые порты), включены в Dockerfile
, который описывает, как построить образ.
Обратная сторона этого заключается в том, что вам нужно убедитесь, что все эти настройки действительно включены в ваш Dockerfile
:
# Copy the application code in
COPY . .
# Set the "development" environment variable
ENV PYTHON_API_ENV=development
# Document which port you'll use by default
EXPOSE 8000
# Specify the default command to run
# (Consider writing a shell script with this content instead)
CMD python_api_setup.sh development && \
python manage.py migrate && \
python manage.py runserver 0.0.0.0:8000