如何配置 docker 以避免特定地址或子网?
How to configure docker to avoid a specific address or subnet?
在我们的开发环境中,我们使用 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
我们的 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
主持人OS是:
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)
您可以通过在 /etc/docker/daemon.json
(在 linux)文件中设置参数来配置默认桥接网络,如下所示:
{
"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"]
}
参考:https://docs.docker.com/network/bridge/#configure-the-default-bridge-network
如果您拥有更大的基础架构,那么可能会发生此子网冲突,那么我建议您创建自己的 docker 网络,然后托管这些容器。
您可以轻松地为该 docker 网络指定 IP 范围,这样您就可以确保它不会与任何其他网络重叠。
docker network create --subnet 10.10.0.0/16 mynet
并且 运行 您的容器 --network mynet
docker container run -d -p 8080:80 --network mynet --name web nginx
正在使用 docker container inspect
检查容器
"IPAddress": "10.10.0.2",
在 docker-compose 中,您可以像这样定位之前创建的网络 (mynet
)
version: "3.4"
services:
web:
image: nginx
ports:
- "8888:80"
networks:
- mynet
networks:
mynet:
external:
name: mynet
在我们的开发环境中,我们使用 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
我们的 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
主持人OS是:
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)
您可以通过在 /etc/docker/daemon.json
(在 linux)文件中设置参数来配置默认桥接网络,如下所示:
{
"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"]
}
参考:https://docs.docker.com/network/bridge/#configure-the-default-bridge-network
如果您拥有更大的基础架构,那么可能会发生此子网冲突,那么我建议您创建自己的 docker 网络,然后托管这些容器。
您可以轻松地为该 docker 网络指定 IP 范围,这样您就可以确保它不会与任何其他网络重叠。
docker network create --subnet 10.10.0.0/16 mynet
并且 运行 您的容器 --network mynet
docker container run -d -p 8080:80 --network mynet --name web nginx
正在使用 docker container inspect
"IPAddress": "10.10.0.2",
在 docker-compose 中,您可以像这样定位之前创建的网络 (mynet
)
version: "3.4"
services:
web:
image: nginx
ports:
- "8888:80"
networks:
- mynet
networks:
mynet:
external:
name: mynet