Windows Docker容器无法ping主机

xa9qqrwz  于 11个月前  发布在  Docker
关注(0)|答案(6)|浏览(255)

我正在Windows Server 2016主机上运行Windows Docker容器,运行默认配置。
当使用命令运行Docker容器时:
第一个月
当我运行命令时:
ping <hostIPAddress>
它只是说请求超时。我已经检查过我可以ping 8.8.8.8和google.com等.甚至同一子网中的其他机器。唯一我不能ping的是主机。
我已经在'docker run'命令中添加了'--dns ',但这只允许我通过主机名而不是IP来ping主机。
有没有人看到这个问题,并有一个解决方案?

yxyvkwin

yxyvkwin1#

我找到了一个解决方案(我不愿意称之为解决方案):
Windows Container Network Drivers:创建一个“透明”网络:

docker network create -d transparent trans

字符串
将容器连接到此网络

docker run --network=trans ...

重要提示:请注意,使用此网络,您的容器需要从Host Subnet获取IP地址,并直接暴露给它。

可能相关(这是关于从主机访问容器):

根据https://github.com/Microsoft/Virtualization-Documentation/issues/253#issuecomment-217975932(JMesser81):
这是我们的Windows NAT实现(WinNAT)中的一个已知限制,即您无法直接从容器(NAT)主机访问静态端口Map中的外部端口。

xytpbqjk

xytpbqjk2#

在我的情况下,我有一个企业管理的McAfee防火墙运行在我的Windows主机上。我不能在防火墙上添加任何额外的规则,但幸运的是有一个规则,允许从172.16.0.0/24访问。
我使用了“docker network create -d transparent transs”,它按照描述的那样工作,但我对分配给容器的主机网络的IP不满意。
我做了以下工作:

  • docker network create --driver=nat --subnet= 172.16.0.0/24 br0
  • 在我的docker run命令中添加了--network= br 0
zwghvu4y

zwghvu4y3#

希望这能帮上忙。
在Windows 10上,当在0.0.0.0:5057上托管Linux容器时,我能够使用控制面板>所有控制面板项目>网络连接中找到的vEthernet(默认交换机)NIC的IP地址从Windows主机(powershell)ping我的服务器:


的数据

vmpqdwk3

vmpqdwk34#

我正面临着同样的问题。
我的解决方法是重新启动docker服务,之后它工作正常。我仍然在寻找一个永久的解决方案。

root@a6c40eb25cbf:/# ping xxx.xx.xx.xxx
PING xxx.xx.xx.xxx (xxx.xx.xx.xxx): 56 data bytes
64 bytes from xxx.xx.xx.xxx: icmp_seq=0 ttl=37 time=3.541 ms
64 bytes from xxx.xx.xx.xxx: icmp_seq=1 ttl=37 time=2.643 ms
64 bytes from xxx.xx.xx.xxx: icmp_seq=2 ttl=37 time=1.857 ms
^C--- xxx.xx.xx.xxx ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss

字符串

i2loujxw

i2loujxw5#

这对我有用,我希望它对你有用。
目前,您必须安装WSLWSL 2,并启用虚拟化,才能在Windows上运行Docker。从PowerShell安装WSL时使用以下command

wsl --install -d Ubuntu

字符串
显然,您需要在Windows上下载并安装Docker Desktop。安装后,需要从Docker桌面设置启用WSL集成。
x1c 0d1x的数据
配置WSL和Docker Desktop后,您可以创建/使用您的容器。示例:

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres


最后,您必须确定WSLIP,您必须打开您在第一步中安装的Linux发行版,在我们的情况下是Ubuntu,这将打开您的终端,在这里我们将执行:

ifconfig


您将识别eth0的ip,例如:172.27.123.123

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 172.27.123.123  netmask 255.255.240.0  broadcast 172.27.127.255
    inet6 fe80::215:5dff:fecf:b4  prefixlen 64  scopeid 0x20<link>
    ether 00:15:5d:cf:00:b4  txqueuelen 1000  (Ethernet)
    RX packets 4389  bytes 299784 (299.7 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 4343  bytes 315643 (315.6 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


现在您可以从Windows中的CMD ping到此IP。

  • 注意:连接将取决于容器的端口,例如:172.27.123.123:8080。*
amrnrhlw

amrnrhlw6#

我最近在尝试将Xdebug与Docker和WSL 2一起使用时遇到了这个问题。我尝试了从更改VSCode/Xdebug设置,禁用防火墙和各种互联网/网络故障排除步骤的所有方法,但似乎没有任何方法可以解决这个问题,也没有任何原因可以解释为什么我的Docker容器无法访问我的WSL 2主机IP。
最后,在绝望中,我重新安装了Docker并重新安装了它,瞧-Xdebug又神奇地工作了!所以如果所有其他方法都失败了,请尝试重新安装Docker Desktop。

相关问题