如何配置docker以避免特定的地址或子网?

SHo*_*oko 6 docker docker-compose docker-network

在我们的开发环境中,我们使用 docker-compose 文件管理 20 多个容器,但有时其中一个容器从我们的网络获取一个 IP,导致我们失去连接。发生这种情况时,我们手动关闭容器和网络。

当我们添加更多容器时,有没有办法配置 docker 以避免使用特定的 IP 地址或子网?

我们的 Docker 版本是:

Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:45:36 2020
 OS/Arch:           linux/amd64
 Experimental:      false
Run Code Online (Sandbox Code Playgroud)

我们的 docker-compose 版本是:

docker-compose version 1.25.4, build 8d51620a
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
Run Code Online (Sandbox Code Playgroud)

主机操作系统是: Linux lin_env_int_2 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux(Ubuntu 18.04.4 LTS)

Mic*_*nne 7

您可以通过在(Linux 上)文件中设置参数来配置默认桥接网络/etc/docker/daemon.json,如下所示:

{
  "bip": "192.168.1.5/24",
  "fixed-cidr": "192.168.1.5/25",
  "fixed-cidr-v6": "2001:db8::/64",
  "mtu": 1500,
  "default-gateway": "10.20.1.1",
  "default-gateway-v6": "2001:db8:abcd::89",
  "dns": ["10.20.1.2","10.20.1.3"]
}
Run Code Online (Sandbox Code Playgroud)

参考: https: //docs.docker.com/network/bridge/#configure-the-default-bridge-network


Mat*_*ava 6

如果您有更大的基础设施,当可能发生子网冲突时,我建议您创建自己的 docker 网络来托管这些容器。

您可以轻松地为该 docker 网络指定 IP 范围,这样您就可以确保它不会与任何其他网络重叠。

docker network create --subnet 10.10.0.0/16 mynet
Run Code Online (Sandbox Code Playgroud)

并运行你的容器--network mynet

docker container run -d -p 8080:80 --network mynet --name web nginx
Run Code Online (Sandbox Code Playgroud)

使用检查容器docker container inspect

"IPAddress": "10.10.0.2",
Run Code Online (Sandbox Code Playgroud)

mynet在 docker-compose 中,您可以像这样定位之前创建的网络 ( )

version: "3.4"

services:
  web:
    image: nginx
    ports:
      - "8888:80"
    networks:
      - mynet

networks:
  mynet:
    external:
      name: mynet
Run Code Online (Sandbox Code Playgroud)