Образ докера Django запускает только оболочку Python - PullRequest
0 голосов
/ 11 октября 2019

У меня есть следующий файл docker-compose

version: '3'

services:
  web:
    build: .
    command: bash -c "python manage.py collectstatic --no-input && gunicorn -w 2 --bind 0.0.0.0:8000 api.wsgi:application"
    volumes:
      - .:/code
      - static_volume:/code/api/static
    expose:
      - 8000
    environment:
      - DJANGO_SETTINGS_MODULE=api.settings.production
    depends_on: 
      - redis
  redis:
    image: "redis:alpine"
  celery:
    build: .
    command: celery -A api worker -l warning
    volumes:
      - .:/code
    environment:
      - DJANGO_SETTINGS_MODULE=api.settings.production
    depends_on:
      - redis
  nginx:
    build: ./nginx
    ports:
      - 80:80
    volumes:
      - static_volume:/code/api/static
    depends_on:
      - web

volumes:
  static_volume:

, который я использую для создания образа docker и отправки его в наш реестр Docker gitlab с помощью следующих команд:

docker build -t foo/api-django .
docker push foo/api-django

Это работает без проблем. Но как только я вытягиваю образ и запускаю его, используя следующую команду

docker run -p 8000:80 -i -t foo/api-django

, он просто показывает мне оболочку python изображения: docker image just shows python shell

любой совет? когда я просто запускаю docker-compose, он обычно запускает nginx, gunicorn и т. д.

EDIT: вот мой новый dockerfile, который, кажется, работает. но теперь запускается только gunicorn, когда я использую docker ps

FROM python:3
ENV PYTHONUNBUFFERED 1
ENV C_FORCE_ROOT true
ENV DJANGO_SETTINGS_MODULE api.settings.production
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
CMD [ "python", "manage.py", "collectstatic", "--no-input" ]
CMD [ "gunicorn", "-w", "2", "--bind", "0.0.0.0:8000", "api.wsgi:application" ]

1 Ответ

1 голос
/ 11 октября 2019

Здесь ваша команда не будет работать, потому что команда, которую вы пытаетесь выполнить (python manage.py collectstatic --no-input && gunicorn -w 2 --bind 0.0.0.0:8000 api.wsgi:application), находится внутри docker-compose файла.

Предполагается, что она запускается через docker compose. Используйте

docker-compose -f docker-compose.yml build  # `docker-compose up` will work if your yml file is named `docker-compose.yml`

для создания образов

и используйте следующую команду для запуска этих контейнеров:

docker-compose -f docker-compose.yml up

Вы можете использовать docker-compose -f docker-compose.yml up -d, чтобы запустить его как демонРежим.

Или вы можете поместить эту команду в Dockerfile и удалить ее для файла составления:

FROM python:3
ENV PYTHONUNBUFFERED 1
ENV C_FORCE_ROOT true
# rest of the code

CMD python manage.py collectstatic --no-input; gunicorn -w 2 --bind 0.0.0.0:8000 api.wsgi:application

Тогда вы сможете запустить докер, используя docker run. Это только для запуска контейнера web. Это не будет работать с остальными контейнерами. Если вы обновите CMD внутри Dockerfile, то обязательно удалите его из command раздела docker-compose.yml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...