![](/img/trans.png)
[英]django runserver hangs in docker-compose up but runs correctly in docker-compose run
[英]Unable to runserver with docker-compose up
我在開發時使用Docker。 我注意到我無法使用docker-compose up
命令啟動dev服務器,但可以使用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 run
服務器啟動正常:
如果我將docker-compose.yml> services> web>命令更改為/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命令,如遷移 ,工作正常
./manage.py runserver
需要分配一個偽TTY。 您可以通過這種方式將其傳遞給docker-compose.yml
services:
web:
tty: true
command: ./manage.py runserver 0:3000
正如您稍后提到的,您應該在compose文件中指定命令,但是使用reload
選項。
像這樣:
command: /usr/local/bin/gunicorn project.wsgi:application -w 4 -b :3000 --reload
在我的情況下,我只在第一個docker-compose up
運行時遇到了這個問題。 這是因為DB初始化花了太長時間。 所以只需按Ctrl-C
並再次運行docker-compose up
。
depends_on
並不真正監視數據庫服務器狀態 - 它監視容器狀態。 因此,在數據庫准備好連接之前,它會啟動您的Web應用程序。
是的, tty: true
Mazel Tov提出的tty: true
非常有用。 沒有它,您將看不到Django錯誤消息(我不知道為什么),這將有助於您理解該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.