跨docker-compose的网络互通
前言
docker真的太爽了,特别是写好了docker-compose之后直接搬目录就可以到别的地方跑起来。但是还是有一些不好的地方,比如默认每一个docker-compose.yaml
都会建立一个独立的网络,如果在一台机子上跑了好几个,就会出现一堆网桥(性能不性能我倒是不关心,但是看着心烦)。刚好因为用了CloudFlare的argo tunnel,对于容器的内网ip有固定的需求(顺便还要开一下ipv6)好就进行一波配置升级了。水篇文章记录一下。
冻手
启用docker的ipv6
docker官方对v6的支持其实并不好,不过现在其实还算可用(虽然有时候还是会出现一些小问题)
update: 从v27.0.1版本开始已经默认支持ipv6,不再需要启用实验性标志。
编辑/etc/docker/daemon.json
如果没有就新建一个
{
"ipv6": true,
"ip6tables": true,
"fixed-cidr-v6": "fd00::/80",
"experimental": true
}
这里就算是打开了ipv6顺便开启了ipv6 nat(容器内也可以访问v6网络)
这时候重启docker,连接到bridge和host的主机大概是能连上ipv6了。
新建一个网络
tips:因为我要用到ipv6,所以新建的时候也把ipv6加进去了,如果用不到的可以删除。其他参数根据自己的实际需要来改。
新建网络,命令行执行以下命令即可:
sudo docker network create mynet --ipv6 --subnet=fd01::/80 --subnet=172.30.0.0/24
更改docker-compose配置
- 给容器新增networks信息(这里因为我不需要固定的ipv6所以不作设置)
networks:
mynet:
ipv4_address: 172.30.0.2
- 在
docker-compose.yaml
内声明这个网络
networks:
mynet:
external: true
以alist的docker-compose文件做例子:
version: '3.3'
services:
alist:
restart: always
volumes:
- '/opt/alist/data:/opt/alist/data'
ports:
- '5244:5244'
environment:
- PUID=0
- PGID=0
- UMASK=022
container_name: alist
image: 'xhofe/alist-aria2:latest'
networks:
mynet:
ipv4_address: 172.30.0.10
networks:
mynet:
external: true
然后运行sudo docker-compose up -d
recreate下容器即可。
删除无用网络
做完上面那几步,你很高兴地发现你的容器已经连上了你自定义的网络,但是原先默认创建的那一坨答辩网络他还在啊。别急,docker自带删除无用网络的功能。
一把梭直接搞定:docker network prune
删完之后,整个世界都清净了。
总结
docker真的巨好用,墙裂推荐!虽然坑不少,但是那些问题善用搜索引擎基本都能解决。(最重要是,配置文件写完一次永久使用,太香了!)