docker自定义容器ip的方法

Docker在个人vps玩家中是非常好用的容器工具。只需要创建一个Nginx容器,接管80和443端口,所有服务都通过Nginx进行反代。

这样即主机只需要开放三个端口,80/443/22(建议改为ssh非标端口)

Docker 创建一个名为mynet的网络

1
docker network create --driver bridge --subnet 172.20.0.0/24 --gateway 172.20.0.1 mynet

在docker compose文件中,使用如下方式即可指定一个地址为172.20.0.8:6379的redis容器,这个地址即可通过Nginx反代到别的端口

而port无需手动指定映射,主机的46379端口并不会开放。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: '3'
networks:
default:
external: true
name: mynet

services:
redis:
container_name: redis7
image: redis:7
# ports:
# - "46379:6379"
volumes:
- ./build/redis/redis.conf:/etc/redis/redis.conf
- ./build/redis/data:/data
environment:
TZ: Asia/Shanghai
restart: always
command: redis-server /etc/redis/redis.conf
networks:
default:
ipv4_address: 172.20.0.8

这样启动的容器,重启也不会改变容器的ip地址。

若是使用docker命令,则类似下面这样,创建了一个172.20.0.3地址的portainer容器。再使用Nginx对该内网地址进行反代即可。

1
2
3
4
5
6
7
8
docker run -d \
--name=portainer \
--restart=always \
--network mynet \
--ip 172.20.0.3 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:2.16.2