【发布时间】: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 来测试我的连接。
问题:
- 我尝试从我的容器运行以下 PowerShell 脚本
test-netconnection -ComputerName "VM1" -port 55555- 失败。 但是,我可以运行test-netconnection -ComputerName "VM1" -port 80并能够接收TcpTestSucceeded。我尝试的所有其他端口也都失败了。
我尝试了什么:
我证明VM1的55555端口是对外开放的,可以ping通,tcp测试从VM2到VM1成功。
关闭 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