【问题标题】:Can't access publicly exposed Docker container port from external machine, only from localhost?无法从外部机器访问公开暴露的 Docker 容器端口,只能从本地主机访问?
【发布时间】:2017-08-31 19:53:05
【问题描述】:

我在我的 Ubuntu Linux 14.04 机器上运行了一个 Docker 容器,它公开了一个端口:

docker run --name spacyapi -d -p 127.0.0.1:7091:7091 jgontrum/spacyapi:en

我可以在本地机器上毫无问题地连接容器中的服务器并对其执行命令。例如:

curl http://localhost:7091/api --header 'content-type: application/json' --data '{"text": "This is a test."}' -X POST

命令忠实执行。但是,如果我从外部机器尝试相同的 CURL 命令,我会收到“连接被拒绝”错误:

curl http://192.5.169.50:5000/api --header 'content-type: application/json' --data '{"text": "This is a test."}' -X POST
curl: (7) Failed to connect to 192.5.169.50 port 7091: Connection refused

其中 192.5.169.50 是运行 Docker 容器的盒子的 IP 地址。

我认为我不需要任何 iptables 规则,因为我不需要为在同一个机器上运行的 Node.JS 服务器设置任何内容。我本地网络上的所有其他计算机都可以正常访问 Node.JS 服务器。但不是 Docker 容器充当服务器。

我该如何解决这个问题?

【问题讨论】:

  • 我不认为容器的IP是192.5.169.50。尝试使用docker inspect <container-uid> | grep IPAddress 来检查容器的IP。
  • @BillCheng - 192.5.169.50 是运行 Docker spaCy 容器的机器的 IP 地址。我正在从我们 Intranet 上的另一个盒子访问该盒子。
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?

标签: linux docker port iptables


【解决方案1】:

您没有使用此标志公开发布您的端口:

-p 127.0.0.1:7091:7091

该标志表示要在主机 127.0.0.1 接口 (localhost) 上发布,端口 7091 到容器端口 7091。到达该端口的唯一方法是在主机上并连接到环回接口。

要公开发布端口,请从该标志中删除 IP:

-p 7091:7091

或显式发布到所有接口:

-p 0.0.0.0:7091:7091

只要您没有使用 dockerd --ip x.x.x.x 覆盖您的 docker 守护程序设置或在 /etc/docker/daemon.json 文件中设置 ip 值,后一种格式与第一种格式相同。

【讨论】:

  • 谢谢!我使用了您展示的第一个示例,现在它可以工作了。您能否在答案中添加使用或不使用 0.0.0.0 作为端口分配命令行参数的一部分之间的有效/实际差异,特别是如果有任何差异两种格式之间的安全性或可用性?
  • Docker 默认使用 0.0.0.0,除非你用 dockerd 守护进程的设置覆盖它,所以这两种格式通常是相同的。
【解决方案2】:

我不认为容器的 IP 是 192.5.169.50。尝试使用docker inspect <container-uid> | grep IPAddress 来检查容器的 IP 是什么。我认为它应该类似于 172.17.0.X。

您也可以只做docker run -d --network=host <image>,它将容器堆叠在主机网络之上。

容器只是在主机之上的东西,主机是真正与外部通信的东西。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-06-02
  • 2020-02-21
  • 2019-09-10
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多