docker - 为什么 ping 到 docker 容器会返回“请求超时”?
问题描述
我有一个在我的本地计算机(适用于 Windows 10 的 docker)中为我工作了很长时间的设置。最近我开始使用 kubernetes,现在我的 docker 容器出现了连接问题。我可以docker exec bash
进入它们,但是 ping 到 cotainer ip 不起作用。
我不是 100% 确定路由是如何工作的。
这是我目前拥有的路由:
# route PRINT
===========================================================================
Interface List
5...8c 89 a5 59 d0 9b ......Realtek PCIe GbE Family Controller
14...00 ff 9a f5 da ac ......TAP-Windows Adapter V9
1...........................Software Loopback Interface 1
20...00 15 5d 1a 4c 88 ......Hyper-V Virtual Ethernet Adapter
35...00 15 5d d6 58 e9 ......Hyper-V Virtual Ethernet Adapter #2
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.0.0.138 10.0.0.15 35
10.0.0.0 255.255.255.0 On-link 10.0.0.15 291
10.0.0.15 255.255.255.255 On-link 10.0.0.15 291
10.0.0.255 255.255.255.255 On-link 10.0.0.15 291
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
172.16.0.0 255.240.0.0 192.168.65.0 10.0.0.15 36
192.168.172.32 255.255.255.240 On-link 192.168.172.33 5256
192.168.172.33 255.255.255.255 On-link 192.168.172.33 5256
192.168.172.47 255.255.255.255 On-link 192.168.172.33 5256
192.168.175.240 255.255.255.240 On-link 192.168.175.241 5256
192.168.175.241 255.255.255.255 On-link 192.168.175.241 5256
192.168.175.255 255.255.255.255 On-link 192.168.175.241 5256
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 10.0.0.15 291
224.0.0.0 240.0.0.0 On-link 192.168.172.33 5256
224.0.0.0 240.0.0.0 On-link 192.168.175.241 5256
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 10.0.0.15 291
255.255.255.255 255.255.255.255 On-link 192.168.172.33 5256
255.255.255.255 255.255.255.255 On-link 192.168.175.241 5256
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
172.16.0.0 255.240.0.0 192.168.65.0 1
===========================================================================
码头工人网络:
# docker network inspect myappjose_default
[
{
"Name": "myappjose_default",
"Id": "28ea26ea55b012d25397029e02bb2ddd442f725b310a5bbd1ff321e563d257c2",
"Created": "2020-10-16T07:21:52.6360039Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/24"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"0c78b6eb1b88447e5690caeb90343dbe345e9e32cc407a60e18aa6cacec37f53": {
"Name": "myappj1-model-container",
"EndpointID": "a85c982c4cb982be6ee654aa3680c50229b3a89032ba9d7b1191e530c29564cf",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/24",
"IPv6Address": ""
},
"e1b518b64b4cdc2e18412c4d53eb3342d313a476c925e4e94529a81d3fa30993": {
"Name": "myappj1-view-container",
"EndpointID": "c4e373e05daf55f726823bccce0aec8faf5deaef6b0223e15e692352f46653f7",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/24",
"IPv6Address": ""
},
"eaa89d990ebcb8f3f26a1e5aff5db6f0ecddbf2e07c13bc52dbb57332818ad47": {
"Name": "myappj1-controller-container",
"EndpointID": "a0a35480e775bbab0e4a23819021751d4368b6d255ef519c89bc5ffd898441fb",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/24",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "myappjose",
"com.docker.compose.version": "1.27.4"
}
}
]
设置中的 Docker 网络:
并且 ping 不起作用:
$ ping 172.18.0.4
Pinging 172.18.0.4 with 32 bytes of data:
Request timed out.
我可以使用以下方法进入容器docker exec
(因此它可以正常工作并且可以访问):
$ winpty docker exec -it myappj1-model-container bash
root@myappj1-model:/#
更新
好像和我这周安装的WSL2有关。docker 正在使用 wsl 引擎,但 wsl 机器没有互联网连接。我仍然不知道如何让它工作
知道如何解决吗?如果您需要更多信息,请告诉我,我会更新
解决方案
为后来者造福;
您需要将容器端口映射到主机端口并尝试测试连接。如果它被映射,当您检查容器时,您会发现一个名为“ExposedPorts”的键,其中提到了端口,如上所示。到目前为止,您正在尝试 ping 一个无法访问的 IP 172.18.0.4,该 IP 只有 docker 网络知道。
您可以使用端口映射运行容器并尝试测试连接。或者您可以在 docker-compose.yml 文件中指定端口映射并执行
docker-compose up
并测试连接。
在windows中测试Powershell中的连接,可以使用Test-NetConnection工具。还有许多其他工具也同样 适用!
PS C:\Users\DMF Media> Test-NetConnection 127.0.0.1 -p 3306
推荐阅读
- html - 为什么模态显示而不调用它?
- sympy - 点到线的距离:输出nan?
- vb.net - 从 DBF 到带有编码的 Visual Studio 的字符串
- c++ - 在反转字符串“my.name.is”时,我得到的输出为“is@.name.my”。我不明白“@”是从哪里来的
- asp.net - 为什么我的 webapp 在以 iis express 运行时只提供 css 文件?
- java - Sonarqube - 渔获量应该结合起来
- listview - 如何在 yii2 listview 中通过旁边的项目更改 listiview 的视图
- ios - 无法符号化 Xamarin Forms iOS 崩溃 - “未找到符号信息”
- python - isdigit () 的奇怪输出
- reactjs - Jest Enzyme 测试错误:在“Connect(App)”的上下文中找不到“store”