moby、docker-ce与docker-ee

原文链接:https://blog.csdn.net/yk20091201/article/details/80016135

1、moby、docker-ce与docker-ee

最早的时候docker就是一个开源项目,主要由docker公司维护。

2017年年初,docker公司将原先的docker项目改名为moby,并创建了docker-ce和docker-ee。

这三者的关系是:

moby是继承了原先的docker的项目,是社区维护的的开源项目,谁都可以在moby的基础打造自己的容器产品。moby project由社区维护。

docker-ce是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品。docker-ce project是docker公司维护
docker-ee是docker公司维护的闭源产品,是docker公司的商业产品。docker-ee是闭源的。

要使用免费的docker,从网页docker-ce上获取。

要使用收费的docker,从网页docker-ee上获取。

2、docker-ce的发布计划

v1.13.1之后,发布计划更改为:

Edge:   月版本,每月发布一次,命名格式为YY.MM,维护到下个月的版本发布
Stable: 季度版本,每季度发布一次,命名格式为YY.MM,维护4个月。

docker-ce的release计划跟随moby的release计划,可以使用下面的命令直接安装最新的docker-ce:

curl -fsSL https://get.docker.com/ | sh
<think>好的,我现在需要解决用户的问题:Docker从1.13升级到26后出现“Error response from daemon: unknown or invalid runtime name: docker-runc”。这个问题看起来和运行时配置有关,因为错误提示明确指出运行时名称无效。让我一步一步分析可能的原因和解决方案。 首先,用户升级的是Docker的版本跨度很大,从1.13直接到26,中间可能有很多配置变化。我需要回忆Docker的版本变化,尤其是运行时相关的改动。Docker在1.13之后的版本中,特别是在Docker 1.12到17.xx版本期间,引入了容器运行时接口(CRI)的变化,后来在较新的版本中默认使用containerd作为运行时,而不再依赖docker-runc这样的组件。所以,升级到Docker 26可能已经弃用了旧的运行时配置。 接下来,用户提到的错误信息是关于“docker-runc”运行时无法识别。这可能意味着在升级后,Docker的配置文件中仍然引用旧的运行时,而新版本不再支持。Docker的配置文件通常是/etc/docker/daemon.json,我需要检查这个文件是否存在旧的运行时配置。 可能的步骤包括: 1. 检查daemon.json中的runtime配置。如果用户之前自定义了运行时,比如指定了"runc"作为默认运行时,而新版本中这个名称可能已经改变或者被移除。 2. Docker在较新版本中默认使用containerd的运行时,可能不再识别docker-runc。需要确认当前的运行时是否已经被替换,比如改为"runc"(不带docker-前缀)或者使用其他如crun等。 3. 如果daemon.json中没有显式配置runtime,可能需要查看默认配置是否存在问题,或者是否有残留的旧配置。 4. 另外,Docker升级过程中可能没有正确清理旧配置,导致冲突。这时候可能需要备份并重新生成daemon.json,或者调整配置参数。 然后,我需要考虑用户可能没有提到的上下文,比如他们是否手动修改过运行时配置,或者是否有遗留的systemd服务文件引用了旧的参数。例如,在早期的Docker版本中,可能会在systemd的docker.service文件中通过--exec-opt指定运行时,这也需要更新。 可能的解决方案步骤: 1. 建议用户检查/etc/docker/daemon.json文件,查找是否有"runtimes"字段或"default-runtime"设置为"docker-runc"。如果有,将其改为"runc"或者注释掉该配置。 2. 如果daemon.json中没有相关配置,可能需要完全删除该文件,或者确保任何旧配置被移除,让Docker使用默认设置。 3. 重启Docker服务,应用新的配置。 4. 如果问题依旧,可能需要检查Docker安装是否完整,或者是否有残留的旧版本组件干扰。 此外,还要考虑到Docker 26可能属于Moby项目的某个版本,版本号的命名可能有变化,比如Docker Engine的版本在20.10之后采用年份命名方式,如20.10.x对应年份2020,之后可能有不同的版本号规范。用户提到的版本26可能是指Docker Engine v26.x,这可能需要确认是否存在,或者是否用户可能混淆了版本号。例如,Docker Engine最近的版本是26.0.0,属于2024年发布的版本,这可能带来较大的变动,导致兼容性问题。 另外,用户可能在升级过程中没有正确遵循升级步骤,例如直接从非常旧的版本跨越多个主版本升级,而没有逐步升级或者处理配置迁移。这种情况下,可能需要参考官方升级文档,确保所有依赖和配置都得到更新。 总结下来,核心问题应该是旧版本的运行时配置在新版本中不被支持,需要调整daemon.json中的相关配置,移除或更新对docker-runc的引用。同时,确保Docker服务重启后应用新配置,并检查是否存在其他遗留配置的影响。</think>在将Docker从1.13升级到较新版本(如26.x)时出现`Error response from daemon: unknown or invalid runtime name: docker-runc`错误,通常是由于运行时配置不兼容导致的。以下是逐步分析和解决方案: --- ### **1. 问题原因** - **Docker运行时变更**:Docker在较新版本(如20.10+)中默认使用`containerd`作为容器运行时,而旧版本可能依赖`docker-runc`。新版本已弃用`docker-runc`名称,直接使用`runc`。 - **残留旧配置**:升级时若未清理旧配置文件(如`/etc/docker/daemon.json`),可能导致Docker尝试加载不再支持的运行时名称。 --- ### **2. 解决方案** #### **步骤1:检查运行时配置** 打开Docker配置文件: ```bash sudo nano /etc/docker/daemon.json ``` 查找以下字段: - `"default-runtime": "docker-runc"` - `"runtimes"`中定义的`docker-runc` 若存在类似配置,修改为: ```json { "default-runtime": "runc", "runtimes": { "runc": { "path": "runc" } } } ``` 或直接**删除`docker-runc`相关的配置**。 --- #### **步骤2:重启Docker服务** ```bash sudo systemctl restart docker ``` --- #### **步骤3:验证运行时状态** 检查当前Docker运行时: ```bash docker info | grep -i runtime ``` 输出应显示默认运行时为`runc`: ``` Default Runtime: runc ``` --- #### **步骤4:彻底清理旧版本(可选)** 若问题未解决,可能是旧版本残留文件冲突。尝试彻底卸载Docker后重新安装: ```bash sudo apt-get purge docker-ce docker-ce-cli containerd.io sudo rm -rf /var/lib/docker sudo rm -rf /etc/docker ``` 然后按照[官方文档](https://docs.docker.com/engine/install/)重新安装最新版本。 --- ### **3. 补充说明** - **版本跨度问题**:直接从1.13升级到26.x属于大跨度升级,建议参考官方升级文档分阶段操作。 - **依赖兼容性**:确保系统依赖(如`containerd`、`runc`)已更新至匹配版本。 --- ### **4. 验证结果** 运行一个测试容器: ```bash docker run hello-world ``` 若输出`Hello from Docker!`,则表明运行时已修复。 --- 通过以上步骤,可解决因运行时名称变更导致的错误。如果仍有问题,请提供`/etc/docker/daemon.json`内容和`docker version`输出以便进一步排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值