无法使用docker-compose up

时间:2018-05-08 09:03:32

标签: python django docker docker-compose

我在开发时使用Docker。我注意到我无法使用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>服务>网络>命令/usr/local/bin/gunicorn project.wsgi:application -w 4 -b :3000它也可以正常工作,但我需要在文件更改时自动重启 enter image description here

我使用Docker for MacOS Version 18.03.1-ce-mac65 (24312)Django==1.10

我尝试将其重置为出厂设置,这没有用。

你能帮我解决这个问题吗?

编辑1:

其他manage.py命令,例如 migrate ,工作正常

3 个答案:

答案 0 :(得分:6)

./manage.py runserver需要分配伪TTY。您可以通过这种方式将其传递给docker-compose.yml

services:
  web:
    tty: true
    command: ./manage.py runserver 0:3000

答案 1 :(得分:3)

正如您稍后提到的,您应该在撰写文件中指定命令,但使用reload选项。

像这样:

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

official docs ref

答案 2 :(得分:0)

就我而言,我仅在第一次运行docker-compose up时才遇到此问题。这是因为数据库初始化花费了太长时间。因此,只需按Ctrl-C并再次运行docker-compose up

depends_on并不真正监视数据库服务器状态,而是监视容器状态。因此,它将在DB真正准备好进行连接之前启动您的Web应用。

是的,Mazel Tov建议的tty: true非常有用。没有它,您将看不到Django错误消息(我不知道为什么),它将帮助您理解问题。