通过shell脚本启动Django Docker容器时,Django端口无法在容器中打开

时间:2017-09-23 17:02:47

标签: django bash docker

我正在尝试将我的Django应用程序容器化,并且一切正常,除非我尝试从shell脚本运行容器。在这种情况下,Django服务器正在运行,但端口未在容器内打开。

这是我正在运行以启动容器的命令:

docker run -d -p 8000:8000 --net=mynet --name myapp -v $PWD:/myapp myimage ./ss

ss是一个启动我的Django应用程序的shell脚本。它包含:

python3 manage.py runserver 0:8000

当我从命令行运行Docker RUN命令时,一切正常;端口映射正确,我可以从我的主机中的浏览器浏览到我的应用程序,并正确加载等等。

但是,如果我在shell脚本中复制上面的运行命令(例如start_container.sh),容器启动就好了,端口映射正确,但是当我尝试在浏览器中打开应用程序时,我得到了连接重置错误。

如果通过运行

打开容器的shell
docker exec -i -t myapp /bin/bash

我可以进入容器。我用ps -eaf检查运行进程我确实看到运行我的Django应用程序的python进程。但是,如果我使用netstat -anetstat -l检查容器内的开放端口,则端口8000 NOT 可用。

如果我然后停止容器,然后从命令行重新启动它,并检查容器,netstat -a将显示端口8000可用,我可以从主机浏览器连接到我的应用程序。

我有点不知道如何解释如何从主机启动docker容器会对容器内部产生这种影响,而且我不确定我的下一个调试步骤应该是什么。

注意1:当在容器内部时,如果我运行启动脚本./ss,则Django启动并且端口按预期打开。

注2:我也尝试在容器的Dockerfile中使用CMD [“ss”]指令,得到相同的结果;如果我从命令行启动容器,它工作正常。如果我从shell脚本启动它,容器内的端口就不会打开。

0 个答案:

没有答案