Docker 用户定义的桥接网络上的容器无法通信

Docker containers on user defined bridge networks can't communicate

我在 Ubuntu 20.10 机器上使用 docker。我想使用 docker-compose 在用户定义的桥接网络上设置一些容器。

我的 docker_compose.yml 当前设置如下:

version: "3.5"
services:
  webserver:
    image: httpd
    networks:
      default:
        ipv4_address: 172.16.0.2

networks:
  default:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.0.0/16
          gateway: 172.16.0.1
    driver_opts:
      com.docker.network.bridge.enable_icc: "true"
      com.docker.network.bridge.enable_ip_masquerade: "true"
      com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
      com.docker.network.bridge.name: "docker1"

运行 docker-compose up 工作正常并与容器创建网络,如果我尝试从主机与容器交互:

wget 172.16.0.2

它的工作原理与我预期的一样。但是,当我尝试将另一个容器添加到网络并尝试连接到它时,即:

docker run --rm -it --net=test1_default alpine wget 172.16.0.2

添加的容器无法连接。还值得注意的是,网络上的容器也无法访问互联网。

我记得能够在添加到 默认桥接网络 的容器之间进行交互,所以我创建了一个修改过的 docker-compose.yml 只是为了测试它:

version: "3.5"
services:
  webserver:
    image: httpd
    network_mode: bridge

它获得了 IP 172.17.0.2。在此网络上尝试与之前相同的命令:

docker run --rm -it --net=bridge alpine wget 172.17.0.2

工作得很好!我还尝试 ping 8.8.8.8,容器似乎也可以正常连接到互联网。

我不认为这是 docker-compose 创建桥接网络的问题,因为如果我手动创建 docker 网络并尝试向其添加容器,我会遇到同样的问题。

如有任何帮助,我们将不胜感激。我也很乐意提供有关主机系统配置的更多信息。

试试官方文档:https://docs.docker.com/compose/compose-file/#network-configuration-reference and here https://docs.docker.com/compose/networking/,你应该阅读 --link 标签

看似微不足道,但我能够通过卸载 docker 并重新安装来解决问题。我的猜测是我最近从 Ubuntu 18.04 升级到 20.10

时出了点问题