如何让 docker 容器使用同一个网段 IP
Docker 创建容器时会用默认的 docker 网段(172.17.0.1/16)来创建新 docker 容器,Docker compose 创建时会选未用的 docker 网段来创建新 docker 容器。这样有时候不同的 docker 就会创建在不同的 subnet 里。如果每个 docker 都是独立存在的也没有什么关系,但是如果 docker 之间要互相访问的话,就有可能出现无法通讯的问题。
特别是在 docker 里安装了数据库(MySQL, MariaDB 等)容器,其他 docker 有可能需要连接到数据库运行。如果是在不同的 subnet 里,就会发生无法访问的问题。
这次教程主要讲一下如何创建一个 docker 的网段,并让所有的 docker 都创建在这个网段下。
- 创建一个 docker 网段,可以选用一个任何的网段,这里用 172.18.0.0/24 ,如果172.18.0.0 已经被占用了,用 172.19 ,172.20 都行
sudo docker network create --subnet=172.18.0.0/24 dockernet
- 用 docker run 在上面创建的网段(dockernet)里创建 docker
# 创建 memos
# 用 --network dockernet 指定网段
sudo docker run -d --restart=always --name memos --network dockernet -p 5230:5230 -v ~/.memos/:/var/opt/memos ghcr.io/usememos/memos:stable
- 用 docker-compose 在上面创建的网段(dockernet)里创建 docker,编辑 docker-compose.yml 文件
services:
memos:
image: ghcr.io/usememos/memos:stable
container_name: memos
volumes:
- /home/ubuntu/.memos/:/var/opt/memos
ports:
- 5230:5230
networks:
default:
networks:
default:
external: true
name: dockernet
- 运行 docker-compose 创建 docker
sudo docker-compose up -d
这样创建的 docker 都会在一个网段里,docker 之间可以很容易地进行通讯。当然也可以建立不同的 docker 网段,然后把不同分类的 docker 创建在不同的网段里,这样更容易管理,更加安全。