折腾一天快把我逼疯了

本来 Docker 对 IPv6 的支持就不好,再来个 rootless,雪上加霜

首先,我们要区分 Docker Engine 和 里面的 Image。

拉取映像是 Docker Engine 在工作,也就是那个 Daemon 本身,而不是某个 container 或 image。

Rootless Docker 使用 RootlessKit 来管理用户命名空间、网络命名空间等,而 RootlessKit 内部使用 slirp4netns 来虚拟化网络栈。

开启虚拟网络的 IPv6 支持

准备工作

将 docker-ce 和一系列 rootless 工具全部升级到最新版:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

特别地,将 slirp4netns 升级到 1.2 以上。

如果用 Ubuntu 22.04 或更早版本的,可以去下载 Debian Bookworm 的 deb 包安装。

修改服务参数

编辑 systemd 服务配置

将以下内容写入 ~/.config/systemd/user/docker.service.d/override.conf

[Service]
Environment=DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS=--ipv6

重载 systemd 并重启 docker 服务

systemctl --user daemon-reload
systemctl --user restart docker

添加 IPv6 路由

到这里如果尝试拉取映像,应该还是不走 IPv6。如果走了,忽略本步。

进入虚拟网络空间

dockerd-rootless-setuptool.sh nsenter

查看当前路由

输入 route -6,路由表可能长下面这样

# route -6
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
fd40:200::/64 [::] U 256 2 0 br-3fba6095d8f6
fd80:100:1::/64 [::] U 256 1 0 docker0
fd80:100:1::/64 [::] U 1024 1 0 docker0
fe80::/64 [::] U 256 2 0 tap0
ip6-localhost/128 [::] Un 0 2 0 lo
fe80::/128 [::] Un 0 3 0 tap0
fe80::7c5b:bbff:fed4:1747/128 [::] Un 0 5 0 tap0
ip6-mcastprefix/8 [::] U 256 5 0 tap0
ip6-mcastprefix/8 [::] U 256 1 0 docker0
[::]/0 [::] !n -1 1 0 lo

路由表的问题就是没有一个往 tap0 的 [::]/0 路由,所以我们要添加出来。

在此之前,我们要先找默认网关

# ip -6 neigh show dev tap0
fe80::2 lladdr 52:56:00:00:00:02 router STALE

这里我的默认网关就是 fe80::2,接下来我们添加路由

ip -6 route add default via fe80::2 dev tap0 metric 100

via 后面就写刚才找到的默认网关。

metric 是跃点数,越小越优先,我这里设成路由表里的最小值。


注意事项

重启 docker 服务之后需要重新添加路由表。

解决 Docker CE 在无根模式(rootless)下无法通过 IPv6 拉取映像的问题的更多相关文章

  1. 写了个python脚本,循环执行某一个目录下的jmeter脚本————解决的问题,每次回归时,都得一个个拉取

    import os import time #需要你改的就这3个参数 #path是放你jmx脚本的文件夹路径 path="D:\\桌面\\每次都是从共享上考最新的\\" #jtl_ ...

  2. Windows 10 PC 安装 Docker CE

    系统要求 Docker CE 支持 64 位版本的 Windows 10 Pro,且必须开启 Hyper-V. 如果系统是win 10 家庭版安装 docker  很恶心, 我也是废了2天才安装, 由 ...

  3. Docker使用阿里云拉取配置源也无法拉取的镜像-github镜像镜像gcr.io

    我搞了一天都没搞好,最后用了这个办法解决了拉取镜像的问题 对于大部分镜像来说,我们配置源就可以,但是对于较新的镜像,没得搞啊,铁子们,真的崩溃... 最终发现可以通过Aliyun的自动构建来处理被墙镜 ...

  4. (原创)nginx反向代理上网,使docker可以拉取镜像

    转载请注明出处:饭饭博客:https://www.cnblogs.com/zzf0305/p/9602107.html 摘语:参考了N多大侠的资料,终于将自己的环境配置起来了.站在众多巨人的肩膀进行总 ...

  5. Docker版本与centos和ubuntu环境下docker安装介绍

    # Docker版本与安装介绍 * Docker-CE 和 Docker-EE * Centos 上安装 Docker-CE * Ubuntu 上安装 Docker-CE ## Docker-CE和D ...

  6. 解决docker容器无网络、无法连接互联网----长期更新

    众所周知,docker有三种默认的网络模式,分别是: bridge host none 然后需要注意的就是内核转发这个,一定不要忘了!配置方法如下 echo -e "net.ipv4.ip_ ...

  7. 解决docker镜像无vim

    docker拉取的镜像一般都是ubantu系统 安装vim apt-get update apt-get vim

  8. centos7 部署 docker ce

    =============================================== 2019/4/9_第1次修改                       ccb_warlock === ...

  9. CentOS 7 安装Docker CE

    本节内容: 背景 Moby项目 安装Docker CE 卸载Docker CE 一.背景 在搭建Registry的过程中,发现使用Docker 1.12版本,在push镜像到Registry时会报错误 ...

  10. Docker入门之 - 如何安装Docker CE

    原文:Docker入门之 - 如何安装Docker CE 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012055638/article/det ...

随机推荐

  1. Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?

    目录 Elasticsearch聚合查询说明 空值率查询DSL Elasticsearch聚合基础知识扩展 Elasticsearch聚合概念 Script 用法 Elasticsearch聚合查询语 ...

  2. Python连接Etcd集群基础教程

    1.背景介绍 最近接手了一个项目,项目是使用Python开发的,其中使用到了Etcd,但是项目之前开发的方式,只能够支持单节点连接Etcd,不能够在Etcd节点发生故障时,自动转移.因此需要基于现有e ...

  3. textFieldShouldReturn: 方法无效化!

    问题描述 不管如何在键盘上点击return,textFieldShouldReturn:方法一直没有调用. 问题代码 @interface ViewController : UIViewControl ...

  4. 构建3D虚拟世界,有哪些3D建模方式?

    "沉浸.3D世界.虚拟社交.虚拟购物",人们畅想通过AR/VR以及其他互联网技术,把现实世界的楼房街道.天气温度.人际关系等投射到虚拟世界,拥有一个网络分身. 但目前来看,要想实现 ...

  5. Ubuntu下的NVIDIA显卡【驱动&CUDA 安装与卸载】

    碎碎念:主要是把显卡相关的整合出来,基础知识后面再放上来 显卡安装后可以有效降低电脑开太多界面卡顿hhh现象,不过如果显卡不好的话或者是独显的话 问题也不大,主要是学习 learning 使用 参考资 ...

  6. 【点云检测】OpenPCDet 教程系列 [1] 安装 与 ROS运行

    前言与参考 主要是介绍库的使用,做笔记区 首先搜索的时候有个问题 一直在我脑子里 hhh 就是MMlab其实还有一个叫mmdetection3d 的库,然后搜的时候发现 hhh 有网友和我一样的疑惑: ...

  7. css-渐变简约的登录设计

    代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  8. django 设置外键的时候,related_name的值大写还是小写,规则怎样

    django 设置外键的时候,related_name的值大写还是小写,规则怎样 在Django中,related_name参数用于定义反向关系的名称,即通过外键字段反向查询关联模型的对象.relat ...

  9. oeasy教您玩转vim - 84 - # 命令command

    ​ 命令 command 回忆 关于 函数function 可以调用别的函数 :call append(0,"oeasy o2z o3z") 还可以执行表达式 :call exec ...

  10. 构建基于Java Spring Boot和Uniapp的心理小程序:从零到一的完整指南

    构建基于Java Spring Boot和Uniapp的心理小程序:从零到一的完整指南 前言 大家好,今天我们来聊聊如何使用Java Spring Boot和Uniapp构建一个心理小程序.这个项目不 ...