当前位置: 首页 > article >正文

解决 WSL 2 中 Ubuntu 22.04 安装 Docker 后无法启动的问题

问题场景

安装Docker后,执行sudo service docker start启动Docker,提示启动成功

root@Dev:~# sudo service docker start
* Starting Docker: docker                                                                                   [ OK ]

执行sudo service docker status查看Docker状态,发现Docker已停止运行

root@Dev:~# sudo service docker status
 * Docker is not running

问题的根本原因

iptables和nftables

iptables是Linux内核中用于管理网络规则的工具。

nftables是iptables 的下一代替代品,提供了更强大的功能和性能。

在某些Linux发行版(如 Ubuntu 20.04 及更高版本)中,iptables被替换为iptables-nft,即基于nftables的兼容层。

Docker的依赖

Docker依赖于传统的 iptables-legacy 来管理网络规则。

如果系统默认使用的是 iptables-nft,Docker 可能无法正确配置网络规则,导致启动失败。

结论

Docker的网络功能(如端口映射、网络隔离)依赖于传统的iptables规则。虽然iptables-nft提供了兼容层,但在某些情况下,Docker可能无法正确解析或应用这些规则,导致网络初始化失败。

解决

运行sudo update-alternatives --config iptables切换iptables实现,系统会提示选择iptables的实现方式。

通常有以下选项:

iptables-legacy:传统的iptables实现

iptables-nft:基于nftables的兼容层

通过选择iptables-legacy,将系统切换回Docker兼容的传统iptables实现,于是Docker就能够正常启动并管理网络规则。

root@Dev:~# sudo 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  

切换后,可以验证 iptables 的实现是否正确:

root@Dev:~# iptables --version
iptables v1.8.7 (legacy)

验证

启动Docker并查看状态可以发现,通过WSL 2运行的Ubuntu安装Docker是正常运行的,问题已得到解决

root@Dev:~# sudo service docker restart
 * Starting Docker: docker                                                                                       [ OK ]
root@Dev:~# sudo service docker status
 * Docker is running
root@Dev:~# sudo service docker status
 * Docker is running

http://www.kler.cn/a/510853.html

相关文章:

  • 通信协议之数据帧常用校验方法(奇偶校验、CRC校验)
  • 二、点灯基础实验
  • 深度学习 Pytorch 基本优化思想与最小二乘法
  • 动手学大数据-3社区开源实践
  • redis-排查命中率降低问题
  • 左神算法基础提升--4
  • 21.1、网络设备安全概述
  • Ubuntu22.04安装paddle GPU版本
  • Linux| ubuntu系统入门篇
  • 解决Spring Boot中Druid连接池“discard long time none received connection“警告
  • 分布式 ID 生成策略:应用场景与 ShardingSphere 实现
  • EPLAN 2024-电机保护开关符号,辅助触点
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(13)网格单元分类、物理场与自由度概念
  • http://noi.openjudge.cn/——4.7算法之搜索——【169:The Buses】
  • 《王者荣耀》皮肤爬虫源码
  • 【漫话机器学习系列】050.epoch(迭代轮数)
  • 数字艺术类专业人才供需数据获取和分析研究
  • 解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(6)(并行相关Hint)
  • 接口测试Day10-测试数据封装(参数化-数据驱动)
  • 【氮化镓】香港科技大学陈Kevin-单片集成GaN比较器
  • TensorFlow深度学习实战(5)——神经网络性能优化技术详解
  • Linux磁盘空间不足,12个详细的排查方法
  • 【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】
  • NavVis手持激光扫描帮助舍弗勒快速打造“数字孪生”工厂-沪敖3D
  • SpringMVC (1)
  • Ability Kit-程序框架服务(类似Android Activity)