我在开发时使用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
,则只启动数据库:
如果我更改docker-compose.yml>服务>网络>命令/usr/local/bin/gunicorn project.wsgi:application -w 4 -b :3000
它也可以正常工作,但我需要在文件更改时自动重启
我使用Docker for MacOS Version 18.03.1-ce-mac65 (24312)
,
Django==1.10
我尝试将其重置为出厂设置,这没有用。
你能帮我解决这个问题吗?
编辑1:
其他manage.py命令,例如 migrate ,工作正常
答案 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
答案 2 :(得分:0)
就我而言,我仅在第一次运行docker-compose up
时才遇到此问题。这是因为数据库初始化花费了太长时间。因此,只需按Ctrl-C
并再次运行docker-compose up
。
depends_on
并不真正监视数据库服务器状态,而是监视容器状态。因此,它将在DB真正准备好进行连接之前启动您的Web应用。
是的,Mazel Tov建议的tty: true
非常有用。没有它,您将看不到Django错误消息(我不知道为什么),它将帮助您理解问题。