V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HOMMEEN
V2EX  ›  Docker

关于 docker 给容器分配 IPv6 的问题

  •  
  •   HOMMEEN ·
    HOMMEEN · 2022-02-02 23:45:32 +08:00 · 2412 次点击
    这是一个创建于 1004 天前的主题,其中的信息可能已经有所发展或是发生改变。

    已经按照这篇文章Docker 桥接网络开启 IPv6 支持中的步骤一步一步做下来了。 但是在配置 Docker Compose 的 IPv6 支持的时候,已经按照自己划分的网段配置好了,但是新建容器之后并没有分配给他 IPv6 ,这是啥原因? Snipaste_2022-02-02_23-41-12.jpg Snipaste_2022-02-02_23-44-03.jpg

    第 1 条附言  ·  2022-02-03 09:16:20 +08:00
    在这里声明下:已经修改好 daemon.json 并且 docker 已经成功获取到 v6 ,只不过我再怎么新建容器都无法为容器分配天 6
    15 条回复    2022-02-03 15:07:58 +08:00
    Showfom
        1
    Showfom  
       2022-02-03 01:15:20 +08:00
    这个我遇到过,后来发现压根不用那么麻烦,从 mailcow 那偷学来的

    首先修改 docker 配置

    cat > /etc/docker/daemon.json <<EOF
    {
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "20m",
    "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
    }
    EOF

    然后重启 docker 服务

    然后把你那串 networks 的 yaml 都删了,默认就会分配 IPv6 了

    楼主的配置估计是没有开 ip6tables
    mason961125
        2
    mason961125  
       2022-02-03 01:16:53 +08:00
    HOMMEEN
        3
    HOMMEEN  
    OP
       2022-02-03 09:13:48 +08:00 via Android
    @Showfom 感谢回复,daemon.json 已经在一开始配置好关于 ipv6 的那 4 行内容,一开始尝试的时候 docker compose 里面确实没写 networks ,但发现他并不会自动分配,才尝试手动添加
    HOMMEEN
        4
    HOMMEEN  
    OP
       2022-02-03 09:14:30 +08:00 via Android
    @mason961125 配置了并且也重启了不起作用🙈
    Showfom
        5
    Showfom  
       2022-02-03 09:19:32 +08:00
    @HOMMEEN #3 我看你配置文件里想给 docker 分配公网 IPv6 ?那你何必用 bridge 模式呢,直接 host 模式吧
    HOMMEEN
        6
    HOMMEEN  
    OP
       2022-02-03 13:34:51 +08:00
    @Showfom 唔 谢谢。刚才新建了个 network 吧容器添加进去好像就可以用了
    Showfom
        7
    Showfom  
       2022-02-03 13:43:41 +08:00
    @HOMMEEN #6 给容器分配公网 IP 不如直接 host 模式方便
    Buges
        8
    Buges  
       2022-02-03 13:54:09 +08:00 via Android
    你没发现你容器的 ipv4 也和你写的不一样吗。。
    你根本就没把容器添加到你声明的网络中。
    HOMMEEN
        9
    HOMMEEN  
    OP
       2022-02-03 14:22:02 +08:00
    @Showfom 请教几个关键词 之前有这么想过但是搜不到我想要的
    Showfom
        10
    Showfom  
       2022-02-03 14:27:57 +08:00
    @HOMMEEN #9 ports 直接删掉,然后 network 直接用 host ,放 restart 下面

    network_mode: host
    Showfom
        11
    Showfom  
       2022-02-03 14:30:25 +08:00
    楼主你理解错了一点,你要给 docker 分配的 IPv6 地址,其实是得内网地址用 bridge 模式才好,不然你这样要给容器分配公网地址新手很容易出错

    不过 linuxserver 打包的容器都还行,直接看他们源码,也没有啥暴露的服务,直接 host 模式你就可以直接用宿主机的网络啦
    HOMMEEN
        12
    HOMMEEN  
    OP
       2022-02-03 14:36:02 +08:00
    @Buges 发现了所以我在第二张图里标注了...后来我新建了个网络吧容器添加进去,容器倒是能获取到 v6 的地址,但没法访问外网...
    HOMMEEN
        13
    HOMMEEN  
    OP
       2022-02-03 14:49:21 +08:00
    @Showfom 诶!直接不要端口映射吗?这些好像都是镜像规定要设置的端口,那如果要访问他 webUI 咋办?之前也有试过 host 模式,用`docker inspect [容器名]`查看他的 v6 然而并里面是空的。感谢大佬耐心指教,我真是又菜又爱玩...
    Showfom
        14
    Showfom  
       2022-02-03 14:51:48 +08:00
    @HOMMEEN #13 用 host 模式就无法用端口映射

    你看他 dockerfile 是不是已经默认映射了你要用的那几个端口
    HOMMEEN
        15
    HOMMEEN  
    OP
       2022-02-03 15:07:58 +08:00
    @Showfom 唔 真的可以。用 host 模式创建容器之后,进入容器后台前面现实的就不是容器的名字而是宿主机的名字了对吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   904 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:40 · PVG 05:40 · LAX 14:40 · JFK 17:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.