![带有 l2bridge Compose 文件的 Docker Compose](https://linux22.com/image/1545985/%E5%B8%A6%E6%9C%89%20l2bridge%20Compose%20%E6%96%87%E4%BB%B6%E7%9A%84%20Docker%20Compose.png)
我有一个如下所示的 docker compose 文件:
version: '3.2'
services:
service-one:
build: service-one
container_name: service-one
networks:
- my-custom-network
restart: unless-stopped
service-two:
depends_on:
- service-one
build: service-two
container_name: service-two
networks:
- my-custom-network
restart: unless-stopped
networks:
my-custom-network:
driver: l2bridge
通过运行,这似乎在我的计算机上正常工作docker-compose-up
,所有容器都启动,并且它们相互联网,并且如果需要可以通过 0.0.0.0 访问主机(有些服务我们尚无法容器化,需要主机运行)。
然而,在另一位开发人员的机器上,他下载了所有内容,并运行了docker-compose up
;它创建了网络,机器启动了,但他无法访问它们。如果他执行docker network inspect my-custom-network
,它确实显示网络已创建,并且已分配 IP 地址,但将这些 IP 地址输入浏览器,结果是什么都没有。
我们尝试过手动一次构建一台机器,并将它们放置在默认的“nat”网络中,并且如果将机器放置在那里则可以访问。
所以,我想我的问题分为两部分:
- 我可以重写我的 Compose 文件以使用默认的 nat 网络,同时仍然可以使用服务名称作为主机名吗?(service-two 期望能够引用http://service-one/);我知道在 Creators Update(不可用,我们受企业更新系统支持)中我可以创建多个 nat 网络,但由于我们使用的是周年纪念版,所以不能。
或者...
- 为什么他的 l2bridge 不工作?我的工作正常,我知道 l2bridge 的官方文档上说需要 Creators Update,但我们俩目前都没有运行它,它在我的计算机上仍然运行良好,而在他的计算机上却不行。我们使用相同的网络,具有相同的访问权限、相同的代理、相同的子网、相同的 dhcp 服务器、相同的公司防火墙配置、相同的组策略、相同的 Windows 更新集。为什么我的可以工作而他的不行?
答案1
根据微软的文章 Windows 容器网络:
l2bridge- 连接到使用“l2bridge”驱动程序创建的网络的容器将与容器主机位于同一 IP 子网中。IP 地址必须从与容器主机相同的前缀中静态分配。由于入口和出口上的第 2 层地址转换(MAC 重写)操作,主机上的所有容器端点都将具有相同的 MAC 地址。
需要 Windows Server 2016 或 Windows 10 Creators Update
由于您和您的同事使用的是 Windows 10 版本 1607(周年更新),因此你们都处于文档未保证的情况。这对您有用而对他却无用的原因可能是您的计算机上安装了某些软件或 Windows 更新,而他的计算机上没有安装,例如另一个网络驱动程序。
我认为你们都应该更新到 Windows 10 Creators Update(版本 1703),并且验证你们的 Docker 版本是否相同。