django runserver在docker-compose up中挂起,但在docker-compose run中正确运行

时间:2018-11-19 08:57:10

标签: python django docker docker-compose

编辑

在命令中添加--ipv6时,虽然未正确配置,但似乎超过了进程挂起的位置。

enter image description here

问题

  • 调用 docker-compose up 会执行runserver,但在打印当前时间后会挂起。

docker-compose up

  • 调用 docker-compose run -p 8000:8000 web python manage.py runserver 0.0.0.0:8000 也会执行服务器,但操作成功,可以通过192.168.99.100:8000访问。

docker-compose run -p 8000:8000 web python manage.py runserver 0.0.0.0:8000

问题

为什么我可以直接在外壳程序中从docker-compose运行服务器,而不是从.yml文件运行

对我来说,.yml文件的内容和shell中的docker-compose运行行极为相似。

我能想到的唯一区别可能是正确启动django服务器所需的某种级别的权限,但是我不知道该如何解决。 Docker在Windows 8.1机器上运行。我的虚拟机的共享文件夹是默认的c:\ Users。

文件

我的文件夹包含一个新的Django项目以及这些docker文件。我篡改了python和django的不同版本,但结果是相同的。我已经在两次尝试之间清理了我的图片和容器

docker rm $(docker ps -a -q)
docker rmi $(docker images -q)

docker-compose.yml

version: '3'
services:
    web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
            - .:/code
        ports:
            - "8000:8000"

Dockerfile

FROM python:3.6-alpine
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

requirements.txt

Django>=1.8,<2.0

系统

我的操作系统是Windows 8.1

2 个答案:

答案 0 :(得分:2)

我自己也遇到了这个问题,看来您需要为容器分配一个tty和一个stdin才能使runserver工作:

  python:
    image: my-image:latest
    stdin_open: true # docker run -i
    tty: true # docker run -t
    build:
      context: ..
      dockerfile: docker/Dockerfile

答案 1 :(得分:0)

我遇到了同样的问题,无法做任何其他事情。但是,当我转到docker机器docker-machine ip的ip时,它返回192.168.99.100,然后通过转到192.168.99.100:8000,我的docker容器开始接收请求