• 技术文章 >运维 >Docker

    离线安装docker启动失败

    PHPzPHPz2023-04-25 09:38:04原创42

    在当前云计算和容器化的浪潮下,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、问题描述

    在完成上述离线安装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离线安装和启动过程中,我们需要保持谨慎和耐心,不断进行试验和调试,最终找到合适的方法来解决问题。

    以上就是离线安装docker启动失败的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:
    上一篇:探讨在 Docker 中找不到的各种情况 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 怎么查看docker镜像文件内容• 群晖 docker是否必要• docker ee 怎么收费• docker怎么修改tomcat• docker如何清理日志
    1/1

    PHP中文网