Невозможно запустить сервер с помощью docker-compose - PullRequest
0 голосов
/ 08 мая 2018

Я использую Docker во время разработки.Я заметил, что не могу запустить dev-сервер с помощью команды docker-compose up, но могу с помощью docker-compose run

Вот мой Dockerfile:

FROM python:3.6

WORKDIR /opt/lib
RUN pip install --upgrade pip
COPY requirements.txt ./
RUN pip install -r requirements.txt

WORKDIR /opt/web

Вот docker-compose.yaml

version: '2'
services:
  web:
    build: ./web/
    working_dir: /opt/web
    ports:
      - "3000:3000"
    volumes:
      - ./web:/opt/web
    user: 1000:1000
    depends_on:
      - database
    env_file: env
    command: python manage.py runserver 0.0.0.0:3000

  database:
    image: mdillon/postgis:9.6
    ports:
      - "5432:5432"
    volumes:
      - ./database/data:/var/lib/postgresql/data

Теперь, если я запускаю docker-compose up, запускается только база данных: enter image description here

Но при docker-compose run сервер запускается нормально: enter image description here

Если я изменю команду docker-compose.yml> services> web> на /usr/local/bin/gunicorn project.wsgi:application -w 4 -b :3000, она также работает нормально, но мне нужен автозапуск при изменении файлов enter image description here

Я использую Docker для MacOS Version 18.03.1-ce-mac65 (24312), Django==1.10

Я попытался восстановить заводские настройки, но это не помогло.

Можете ли вы помочь мне с этим?

РЕДАКТИРОВАТЬ 1:

Другие команды manage.py, такие как migrate , работают нормально

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

./manage.py runserver требуется для выделения псевдо-TTY. Вы можете передать его в docker-compose.yml следующим образом

services:
  web:
    tty: true
    command: ./manage.py runserver 0:3000
0 голосов
/ 14 июня 2019

В моем случае я столкнулся с этой проблемой только при первом запуске docker-compose up. Это произошло потому, что инициализация БД заняла слишком много времени. Так что просто нажмите Ctrl-C и снова запустите docker-compose up.

depends_on на самом деле не контролирует состояние DB-сервера - он контролирует состояние контейнера. Таким образом, он запускает ваше веб-приложение до того, как БД действительно будет готова к подключению.

И да, tty: true, предложенный Мазелем Тов, очень полезен. Без этого вы не увидите сообщение об ошибке Django (не знаю почему), которое поможет вам разобраться в проблеме.

0 голосов
/ 08 мая 2018

Как вы упоминали позже, вы должны указать команду в файле compose, но с опцией reload.

Как это:

command: /usr/local/bin/gunicorn project.wsgi:application -w 4 -b :3000 --reload

официальные документы ref

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