Docker 容器无法通过 *** 进行通信
Posted
技术标签:
【中文标题】Docker 容器无法通过 *** 进行通信【英文标题】:Docker container is unable to communicate over the *** 【发布时间】:2021-12-24 19:15:15 【问题描述】:我有一个由以下人员创建的简单容器:
docker run -it --rm -d -p 8080:80 --name web nginx
这是在我家里的笔记本电脑上。我已连接到我们的公司 ***。 我需要我的容器访问的资源是通过 ***。 我最初的想法是,这不应该是一个问题。当流量离开我的容器时,它只会使用我的笔记本电脑路由并找出去哪里——似乎并非如此。 我正在运行 wsl2 容器,我将 traceroute 添加到我的容器中,当我添加到 traceroute 时,我看到:
# traceroute -I cypdelk01.ayz.network
traceroute to cypdelk01.ayz.network (10.1.35.160), 30 hops max, 60 byte packets
1 172.17.0.1 (172.17.0.1) 0.249 ms 0.202 ms 0.192 ms
2 10.1.0.1 (10.1.0.1) 3152.748 ms !H 3152.713 ms !H 3152.707 ms !H
流量似乎永远不会离开容器。这是一个可以解决的问题吗? 我在 Windows 上使用 Docker 桌面是否遇到了一些限制? 我已经从不止一台计算机上尝试过,结果完全相同。 容器与互联网通信没有问题,但似乎无法访问 *** 上的任何内容。
我的谷歌搜索没有找到任何有用的东西。
有人知道这是否可以解决吗?
【问题讨论】:
【参考方案1】:所以这不是什么神秘的网络问题,只是一个简单的 IP 冲突。 Docker 桌面的 kubernetes 实现使用 10.1.0.0/16 作为其默认 IP 范围。这可以通过改变文件来改变:
%APPDATA%\Docker\Roaming\cni\10-default.conflist.
mac 和 linux 存在相同的文件,但路径不同。缺点是您可能不得不在升级 docker desktop 后再次更改此文件,这种情况经常发生。
【讨论】:
以上是关于Docker 容器无法通过 *** 进行通信的主要内容,如果未能解决你的问题,请参考以下文章