因为我需要给容器添加上网的黑白名单,但是我发现机器一重启,容器就上不了网了,仔细检查后发现容器的ip是自动变化的。。。

那固定ip就成了首要大事。这个文章主要介绍如何在docker-compose部署的环境中,设置网络并固定ip。

情况1:将一些容器固定在一个网段下

如果你需要将多个容器放在一个网段下,可以使用这个教程。

我们先定义一个网络

我定义的网络名字叫做heo_global_network用于网络通信的,所以名字也非常清晰。ip通信网段我设置成172.168.0.0/16,规定了ip地址的开头为172.68.*.*

我们首先创建这个网络。

1
docker network create --driver bridge --subnet 172.168.0.0/16 heo_global_network

你可以根据自己的需求来更改参数。

修改容器

我们来修改docker-compose文件。以我的certimate服务为例,他的docker-compose是这样的:

1
2
3
4
5
6
7
8
9
10
version: "3.0"
services:
certimate:
image: registry.cn-shanghai.aliyuncs.com/usual2970/certimate:latest
container_name: certimate_server
ports:
- 10480:8090
volumes:
- ./data:/app/pb_data
restart: unless-stopped

我们首先要添加heo_global_network的定义:

1
2
3
networks:
heo_global_network:
external: true

external代表了用已经创建的网络,因为我们最开始已经用命令创建好了。

然后给容器设置静态ip地址:

1
2
3
4
5
services:
certimate:
networks:
heo_global_network:
ipv4_address: 172.168.0.12 # 设置静态IP地址

最终的文件为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: "3.0"
services:
certimate:
image: registry.cn-shanghai.aliyuncs.com/usual2970/certimate:latest
container_name: certimate_server
ports:
- 10480:8090
volumes:
- ./data:/app/pb_data
restart: unless-stopped
networks:
heo_global_network:
ipv4_address: 172.168.0.12 # 设置静态IP地址

networks:
heo_global_network:
external: true

更新容器

我们cd到docker-compose.yaml文件所在的目录,执行

1
docker-compose up -d

即可。我们就可以看到这个容器的ip已经成功固定了。

固定ip

情况2:只需要将一个容器固定ip

如果你只需要一个容器固定ip,那我们可以通过直接修改docker-compose.yaml文件来进行修改。

添加网络定义(方便管理)

1
2
3
4
5
6
7
networks:
custom_network:
driver: bridge
name: custom_net
ipam:
config:
- subnet: 172.24.0.0/16 # 指定子网

我们这里需要修改custom_network为网络名称,custom_net起一个名,然后修改172.24.0.0/16设置一个子网。

修改容器配置

1
2
3
4
5
services:
certimate:
networks:
custom_network:
ipv4_address: 172.24.0.10 # 固定 IP 地址

我们需要修改custom_network为刚才网络定义的地址,然后172.24.0.10设置成子网下的一个地址即可。

最终的文件为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: "3.0"
services:
certimate:
image: registry.cn-shanghai.aliyuncs.com/usual2970/certimate:latest
container_name: certimate_server
ports:
- 10480:8090
volumes:
- ./data:/app/pb_data
restart: unless-stopped
networks:
custom_network:
ipv4_address: 172.24.0.10 # 固定 IP 地址

networks:
custom_network:
driver: bridge
name: custom_net
ipam:
config:
- subnet: 172.24.0.0/16 # 指定子网

注意

设置ip的时候结尾不要设置为.0和.1,避免和网关冲突。