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

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

我们先定义一个网络

我定义的网络名字叫做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