Docker:无法在另一个容器中访问公开的端口

时间:2016-02-25 14:21:58

标签: django docker

基于图像'python:2.7',我创建了两个容器:container1,container2

test1的Dockerfile:

FROM    python:2.7
EXPOSE  6789
CMD     ["bash", "-c", "'while true;do sleep 1000;done;'"]

test2的Dockerfile:

FROM    python:2.7
EXPOSE  9876
CMD     ["bash", "-c", "'while true;do sleep 1000;done;'"]

然后我使用上面的dockerfiles构建了两个新图像,命名为:test1,test2

Container1:

docker run --name container1 test1

我还在container1的端口6789上设置了一个Django服务器:

#In Django workspace
./manage.py runserver 6789

container2的:

docker run --name container2 --link container1:container1 test2

我还在container2的端口9876上设置了一个Django服务器:

#In Django workspace
./manage.py runserver 9876

在container2中,当我运行

curl container1_ip:6789

连接已拒绝错误。

如何对其进行配置以使其正常工作?

我还创建了一个带有官方nginx图像的容器,它有两个默认端口(80,443)暴露,然后创建另一个容器链接到nginx容器,在容器中,我做了同样的事情

curl nginx_ip:80  #successful

curl nginx_ip:443  #connection refused

为什么会这样?为什么80运行良好,443不起作用?

2 个答案:

答案 0 :(得分:1)

你想通过“卷曲”容器的6789/9876端口做什么?这些端口后面有什么东西(一个ftp服务器或其他东西?)?

在尝试从其他容器中访问它之前,您应该尝试从容器本身访问它

在容器1中:

  

curl container1_ip:6789

我认为你可以访问这些端口,但是你的容器上没有任何东西可以监听它们。

编辑:如果你贬低我,请评论解释原因,以便我可以改进我的答案,谢谢。

答案 1 :(得分:0)

问题不在于如何配置docker,这是关于Django的一些配置问题。 Django默认正在侦听 localhost:port ,我们应该指定一个要侦听的IP地址,或者使用' 0.0.0.0'让它听所有的IP地址。