当通过shell脚本启动Django Docker容器时,Django port在容器中不能打开

我试图容器化我的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 不可用。

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

我有点茫然解释如何从主机启动docker容器将在容器内部产生这种影响,我不知道我的下一个debugging步骤应该是什么。

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

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