前言

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配置

  1. 给容器新增networks信息(这里因为我不需要固定的ipv6所以不作设置)
        networks:
            mynet:
                ipv4_address: 172.30.0.2
  1. 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 -drecreate下容器即可。

删除无用网络

做完上面那几步,你很高兴地发现你的容器已经连上了你自定义的网络,但是原先默认创建的那一坨答辩网络他还在啊。别急,docker自带删除无用网络的功能。

一把梭直接搞定:docker network prune

删完之后,整个世界都清净了。

总结

docker真的巨好用,墙裂推荐!虽然坑不少,但是那些问题善用搜索引擎基本都能解决。(最重要是,配置文件写完一次永久使用,太香了!)