0

0

离线安装docker启动失败

PHPz

PHPz

发布时间:2023-04-25 09:02:55

|

2369人浏览过

|

来源于php中文网

原创

在当前云计算和容器化的浪潮下,docker作为一种主流的应用容器化技术应运而生,成为运维和开发领域最为广泛使用的工具之一。在这样的背景下,docker离线安装也成为了一个十分常见的需求,因为很多用户无法连上互联网,或者安全等因素禁止了互联网连接,因此离线安装成为最为便捷的安装方式之一。但是,在进行离线安装docker的过程中,常常会出现安装成功但启动失败的状况,这对于初学者来说是一个十分头疼的问题。

本文将从实际操作出发,介绍Docker离线安装方法,并针对启动失败进行详细的分析,为大家带来一份详细的指导。

一、Docker离线安装

Docker离线安装方式有两种:一种是通过下载Docker的二进制文件进行安装,另一种是通过配置yum源来进行安装。前者主要适用于没有网络条件的服务器,后者则适用于Linux开发环境的离线安装。

1、通过下载Docker的二进制文件进行安装

这种方法的原理比较简单,就是将Docker的二进制文件下载到本地,然后再进行安装。具体操作步骤如下:

1.1 获取Docker的二进制文件

在官网https://www.docker.com/上下载对应版本的Docker二进制文件。在下载时需要了解当前操作系统的信息,对于centos系统,可以选择下载以下地址对应的二进制文件。

https://download.docker.com/linux/static/stable/x86_64/  docker-版本号.tgz

1.2 安装Docker的二进制文件

安装时需要将下载的二进制文件解压,并将其中的docker和dockerd文件移动到/usr/bin目录下。

tar -xvf docker-版本号.tgz
cp docker/* /usr/bin

2、通过配置yum源进行安装

在centos系统下,可以通过配置yum源方式进行离线安装Docker。具体操作步骤如下:

2.1 获取Docker的yum源

在官网https://www.docker.com/上下载对应版本的Docker安装包。在下载时需要了解当前操作系统的信息,下载对应系统版本的rpm包。

2.2 新建本地yum源

在本地新建一个yum源目录,将下载的Docker安装包复制到该目录下,并通过createrepo命令对该目录进行创建

mkdir /var/docker
cp docker-ce*.rpm /var/docker
createrepo /var/docker

2.3 配置yum源

在/etc/yum.repos.d目录下新建一个repo文件,并写入以下内容

[docker-local]
name=Docker Local repo
baseurl=file:///var/docker
enabled=1
gpgcheck=0

2.4 安装Docker

执行以下命令即可安装Docker

yum install docker-ce

二、启动失败解决方案

1、问题描述

宣小二
宣小二

宣小二:媒体发稿平台,自媒体发稿平台,短视频矩阵发布平台,基于AI驱动的企业自助式投放平台。

下载

在完成上述离线安装Docker的操作后,可能会遇到Docker启动失败的情况,出现以下错误:

$ sudo systemctl start docker
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

执行systemctl status docker.service命令可以发现,启动失败的原因是docker.service文件中“ExecStart”指令无法执行成功:

$ sudo systemctl status docker.service
...
Apr 30 07:40:32 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
Apr 30 07:40:32 localhost.localdomain systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Apr 30 07:40:32 localhost.localdomain systemd[1]: Unit docker.service entered failed state.
Apr 30 07:40:32 localhost.localdomain systemd[1]: docker.service failed.
Apr 30 07:40:32 localhost.localdomain systemd[1]: docker.service holdoff time over, scheduling restart.
Apr 30 07:40:32 localhost.localdomain systemd[1]: Stopped Docker Application Container Engine.

$sudo journalctl -xe
dockerd-current[14552]: time="2020-04-30T07:40:32.652790118+08:00" level=error msg="systemd notifier failed: Unable to load systemd module \"libsystemd.so\": cannot open shared o
dockerd-current[14552]: failed to start daemon: Error initializing network controller: list bridge addresses failed: PredefinedLocalScopeDefaultNetworks List failed: Predefined
dockerd-current[14552]: Error starting daemon: Error initializing network controller: list bridge addresses failed: PredefinedLocalScopeDefaultNetworks List failed: Predefined
systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start Docker Application Container Engine.
systemd[1]: Unit docker.service entered failed state.
systemd[1]: docker.service failed.

2、问题解析

通过上述错误信息,可以发现Docker启动失败的原因是因为Docker的网络控制器无法启动。具体是因为Docker的网络控制器通过iptables防火墙对容器网络进行管理,而防火墙默认是禁止所有非本地流量的。对于Docker而言,在第一次启动时会自动在iptables中添加相关规则,但离线安装的Docker如果是第一次启动,就会出现添加规则失败,从而导致网络控制器无法启动的问题。具体表现就是当用户启动Docker时,Docker将会根据本地的IP地址,自动创建一个名为docker0的网桥,如果该操作失败,Docker则无法启动。

3、问题解决

解决该问题的方法主要有两种:

3.1 创建docker0网桥

手动创建docker0网桥可以解决该问题,在centos下,可以执行以下命令来手动创建docker0网桥:

sudo ip link add name docker0 type bridge
sudo ip addr add dev docker0 172.17.0.1/16
sudo ip link set dev docker0 up

完成上述操作之后,再次启动Docker,以管理员身份执行以下命令:

$ sudo systemctl start docker

即可完成Docker的启动。

3.2 修改防火墙规则

关闭防火墙或者修改防火墙规则也是解决该问题的一种有效方法。在关闭防火墙时,可以使用以下命令:

$ systemctl stop firewalld
$ systemctl disable firewalld

但这种情况不太推荐,建议按照安全要求尽量保留系统的防火墙。

如果希望修改iptables规则,可以通过以下命令添加规则:

$ sudo iptables -P FORWARD ACCEPT
$ sudo iptables -I FORWARD -j ACCEPT
$ sudo service iptables save

执行完以上操作之后,再次启动Docker,即可正常启动。

三、总结

通过本文的介绍,我们可以看到,在离线安装Docker时,由于网络问题可能会导致Docker无法启动。这时,我们需要对Docker的网络控制器的工作原理有所了解,并对其进行手动配置或者iptables防火墙进行一定的修改,才能最终解决Docker启动失败的问题。当然,我们也可以通过及时查看具体的错误信息,并进行分析来解决这类问题。

因此,在进行Docker离线安装和启动过程中,我们需要保持谨慎和耐心,不断进行试验和调试,最终找到合适的方法来解决问题。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号