簡體   English   中英

無法使用docker-compose運行服務器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM