离线安装docker启动失败
时间:2023-04-25 12:30
在当前云计算和容器化的浪潮下,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 2、通过配置yum源进行安装 在centos系统下,可以通过配置yum源方式进行离线安装Docker。具体操作步骤如下: 2.1 获取Docker的yum源 在官网https://www.docker.com/上下载对应版本的Docker安装包。在下载时需要了解当前操作系统的信息,下载对应系统版本的rpm包。 2.2 新建本地yum源 在本地新建一个yum源目录,将下载的Docker安装包复制到该目录下,并通过createrepo命令对该目录进行创建 mkdir /var/docker 2.3 配置yum源 在/etc/yum.repos.d目录下新建一个repo文件,并写入以下内容 [docker-local] 2.4 安装Docker 执行以下命令即可安装Docker yum install docker-ce 二、启动失败解决方案 1、问题描述 在完成上述离线安装Docker的操作后,可能会遇到Docker启动失败的情况,出现以下错误: $ sudo systemctl start docker 执行systemctl status docker.service命令可以发现,启动失败的原因是docker.service文件中“ExecStart”指令无法执行成功: $ sudo systemctl status docker.service $sudo journalctl -xe 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 完成上述操作之后,再次启动Docker,以管理员身份执行以下命令: $ sudo systemctl start docker 即可完成Docker的启动。 3.2 修改防火墙规则 关闭防火墙或者修改防火墙规则也是解决该问题的一种有效方法。在关闭防火墙时,可以使用以下命令: $ systemctl stop firewalld 但这种情况不太推荐,建议按照安全要求尽量保留系统的防火墙。 如果希望修改iptables规则,可以通过以下命令添加规则: $ sudo iptables -P FORWARD ACCEPT 执行完以上操作之后,再次启动Docker,即可正常启动。 三、总结 通过本文的介绍,我们可以看到,在离线安装Docker时,由于网络问题可能会导致Docker无法启动。这时,我们需要对Docker的网络控制器的工作原理有所了解,并对其进行手动配置或者iptables防火墙进行一定的修改,才能最终解决Docker启动失败的问题。当然,我们也可以通过及时查看具体的错误信息,并进行分析来解决这类问题。 因此,在进行Docker离线安装和启动过程中,我们需要保持谨慎和耐心,不断进行试验和调试,最终找到合适的方法来解决问题。 以上就是离线安装docker启动失败的详细内容,更多请关注Gxl网其它相关文章!
cp docker/* /usr/bin
cp docker-ce*.rpm /var/docker
createrepo /var/docker
name=Docker Local repo
baseurl=file:///var/docker
enabled=1
gpgcheck=0
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
...
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.
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.
sudo ip addr add dev docker0 172.17.0.1/16
sudo ip link set dev docker0 up
$ systemctl disable firewalld
$ sudo iptables -I FORWARD -j ACCEPT
$ sudo service iptables save