【问题标题】:Docker: exposed ports cannot be accessed in another containerDocker:无法在另一个容器中访问暴露的端口
【发布时间】:2016-02-25 14:21:57
【问题描述】:

基于图像'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

容器1:

docker run --name container1 test1

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

#In Django workspace
./manage.py runserver 6789

容器2:

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不好用?

【问题讨论】:

  • 看起来你在这些端口上没有任何监听?
  • 至少,ping container1_ip from container2 有效吗?
  • 您可能已经暴露了端口,但不要将任何进程绑定到它们。由于没有接受连接的过程,您会收到connection refused 错误消息。
  • 抱歉信息缺失,我已经把它们加起来了。实际上,我在两个端口(6789、9876)上都设置了 Django 服务器。

标签: django docker


【解决方案1】:

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

在尝试从另一个容器访问它之前,您应该尝试从容器本身访问它

在容器 1 中:

卷曲容器1_ip:6789

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

编辑:如果您对我投反对票,请评论解释原因,以便我改进我的答案,谢谢。

【讨论】:

  • 抱歉信息缺失,我已经把它们加起来了。实际上,我在两个端口(6789、9876)上都设置了 Django 服务器,并尝试了您的建议:在 container1 中运行 curl container1_ip:6789,它工作并返回了一些 html。但它对原始问题没有帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多