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 容器无法通过 *** 进行通信的主要内容,如果未能解决你的问题,请参考以下文章

部署Flannel,实现跨主机Docker容器通信

Docker 守护进程日志在哪里?

无法在 localhost 上的 docker 容器之间进行通信

两个 docker 容器无法通信

如何通过“主机名”在 Docker 容器之间进行通信

怎么把docker里面已经创建的容器删除