【发布时间】:2019-04-21 14:37:36
【问题描述】:
编辑
将 --ipv6 添加到命令中,虽然没有正确配置,但似乎超过了进程挂起的点。问题
- 调用 docker-compose up 会执行 runserver,但在打印当前时间后会挂起。
- 调用 docker-compose run -p 8000:8000 web python manage.py runserver 0.0.0.0:8000 也会执行服务器,但执行成功并且可以在 192.168.99.100:8000 到达.
问题
为什么我可以直接从 shell 中的 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
【问题讨论】:
-
为什么你在 dockerfile 中绑定 localhost:8080 而不是 0.0.0.0:8080?
-
哦,应该是 0.0.0.0:8000。但是,它仍然以相同的方式挂起。我只是在一些测试后忘了改回来。
-
如果在撰写文件中删除
volumes: - .:/code会怎样 -
从我的撰写文件中删除
volumes: - .:/code并运行它仍然会导致服务器在启动时挂起。我列出了有卷的目录(ls -l),没有卷和运行命令,我注意到有卷和运行命令列出了具有相同权限的相同文件(-rwxrwxrwx),而没有卷的权限是-rwxr-xr-x。我不知道这是否有任何意义。 -
如果我添加行
user: root,即使没有volumes,权限似乎也匹配,尽管它仍然挂起。
标签: python django docker docker-compose