【问题标题】:Docker unable to access ports other than port 80 on the hostDocker 无法访问主机上除 80 端口以外的端口
【发布时间】:2020-01-14 07:41:22
【问题描述】:

我遇到从 docker 访问主机上的非 80 端口时遇到问题的情况。我的容器中有一个应用程序需要访问我主机上的这个端口 55555。

我有 2 个虚拟机 - VM1 和 VM2。 VM1 有 docker 和一个容器正在运行。 VM2是我用来做测试的机器。

用于启动容器的命令

docker run -dit --hostname VM1 --name ContainerTest mcr.microsoft.com/dotnet/framework/sdk:3.5-20191008-windowsservercore-ltsc2019

我执行 exec -it XXXX powershell 来执行所需的 PowerShell 脚本。我使用test-netconnection 来测试我的连接。

问题:

  1. 我尝试从我的容器运行以下 PowerShell 脚本test-netconnection -ComputerName "VM1" -port 55555 - 失败。 但是,我可以运行test-netconnection -ComputerName "VM1" -port 80 并能够接收TcpTestSucceeded。我尝试的所有其他端口也都失败了。

我尝试了什么:

  1. 我证明VM1的55555端口是对外开放的,可以ping通,tcp测试从VM2到VM1成功。

  2. 关闭 VM1 上的防火墙。也没有成功。

我也知道 docker 有 --expose and -p 命令来公开端口,但是,就我而言,我认为我不需要,因为我的目标是从容器访问主机的端口,而不是其他方式。

不明白为什么这个55555端口只能从VM2到VM1,而不能从容器到VM1,而容器只能通过80端口访问VM1。任何人都可以分享一些关于正在发生的事情的信息吗?欣赏它。

【问题讨论】:

  • --hostname 成为您的 容器 的主机名;它不是主机的别名。为此,请使用内置的host.docker.internal
  • @JeroenMostert 你能详细说明一下host.docker.internal 的用法吗,我检查了它从v18.03 版本开始可用,我使用的是v19+,但是,我不能从我的容器中ping host.docker.internal,我是否已将它们明确包含在我的 docker run 命令中?
  • 你在 Linux 上吗?不幸的是,host.docker.internal 仅在适用于 Windows 的 Docker 和适用于 Mac 的 Docker 上受支持(Linux 支持正在开发中但尚未落地,请参阅 the issue 以获取建议的解决方法)。如果你在 Windows 上,你能看到 docker run -it alpine ping -c1 host.docker.internal 是否有效吗?

标签: powershell docker port


【解决方案1】:

一般来说有一个服务可以打开端口而不仅仅是端口号 在 docker 中,您应该使用 docker network driver overlay 以便 docker 在其他网络中使用 希望链接对你有帮助 https://docs.docker.com/network/

【讨论】:

  • 不鼓励仅链接的答案,请添加一些上下文来解释此答案将如何解决相关问题。
猜你喜欢
  • 2021-08-05
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2016-04-30
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多