wsl中迁移ubuntu24.04后docker后无法启动的问题

wsl中迁移ubuntu24.04后docker后无法启动的问题

发生原因

我将外网wsl2中的Ubuntu24.04迁移到内网(无网络)电脑中,发现原本安装的docker无法启动,

在使用 apt-get install docker-ce docker-ce-cli containerd.io重新安装后依然不行

NOTE:迁移后软件会失去注册信息,运行会提示命令未注册,所以需要重新安装。其实系统中已经包含了相关安装包,所以不会联网下载

原因

查看Docker的日志vim /var/log/docker.log显示如下的错误

shell 复制代码
time="2025-04-09T10:29:59.904691194+08:00" level=info msg="Loading containers: start."
time="2025-04-09T10:30:00.055889722+08:00" level=info msg="stopping event stream following graceful shutdown" error="<nil>" module=libcontainerd namespace=moby
time="2025-04-09T10:30:00.056182637+08:00" level=info msg="stopping healthcheck following graceful shutdown" module=libcontainerd
time="2025-04-09T10:30:00.056254606+08:00" level=info msg="stopping event stream following graceful shutdown" error="context canceled" module=libcontainerd namespace=plugins.moby
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to register "bridge" driver: failed to add jump rules to ipv4 NAT table: failed to append jump rules to nat-PREROUTING:  (iptables failed: iptables --wait -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER: Warning: Extension addrtype revision 0 not supported, missing kernel module?
iptables v1.8.10 (nf_tables):  CHAIN_ADD failed (No such file or directory): chain PREROUTING
 (exit status 4))

原因是由于迁移后ubuntu系统使用了iptables-nft,而WSL2不支持导致的。

修复

修改为iptables-legacy即可

shell 复制代码
 root@DESKTOP-5DTRJV0:/home/friday/apt-offline# update-alternatives --config iptables
There are 2 choices for the alternative iptables (providing /usr/sbin/iptables).

  Selection    Path                       Priority   Status
------------------------------------------------------------
* 0            /usr/sbin/iptables-nft      20        auto mode
  1            /usr/sbin/iptables-legacy   10        manual mode
  2            /usr/sbin/iptables-nft      20        manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables (iptables) in manual mode
root@DESKTOP-5DTRJV0:/home/friday/apt-offline# service docker start
 * Starting Docker: docker                                               [ OK ]                                                                                                                                              
root@DESKTOP-5DTRJV0:/home/friday/apt-offline# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
相关推荐
sg_knight1 小时前
Docker镜像搬运工:save与load命令的实战指南
docker·容器·备份与恢复·docker save·docker image备份
明仔丶3 小时前
开启docker中mysql的binlog日志
运维·docker·容器·binlog
大河之J天上来3 小时前
从爬虫到网络---<基石9> 在VPS上没搞好Docker项目,把他卸载干净
网络·爬虫·docker
zxy9814 小时前
Docker、Docker-compose、K8s、Docker swarm之间的区别
docker·kubernetes
心动啊12118 小时前
docker常用命令总结
docker·容器·eureka
python算法(魔法师版)18 小时前
Docker容器启动失败?无法启动?
linux·运维·nginx·docker·容器
不学无术の码农1 天前
Ubuntu 22.04 (WSL2) 上使用 Docker 安装 Nacos 3.0.0
ubuntu·docker
AnnyYoung1 天前
从Dockerfile 构建docker镜像——保姆级教程
docker·容器·eureka
何怀逸1 天前
安装 Docker
运维·docker·容器
码码哈哈0.01 天前
2025最新:3分钟使用Docker快速部署单节点Redis
redis·docker·eureka