首頁 >運維 >Docker >離線安裝docker啟動失敗

離線安裝docker啟動失敗

PHPz
PHPz原創
2023-04-25 09:02:551532瀏覽

在目前雲端運算和容器化的浪潮下,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, , 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[11] : Stopped Docker Application Container Engine.

$sudo journalctl -xe

dockerd-current[14552]: time="2020-04-30T07:40:32.652790118 08:00" left systemd notifier failed: Unable to load systemd module \"libsystemd.so\": cannot open shared o
dockerd-current[14552]: failed to start daemon: Error initializing network controworks: failed sdefus Predefined
dockerd-current[14552]: Error starting daemon: Error initializing network controller: list bridge addresses failed: PredefinedLocalScopeDefaultNetworks List failed: Predefined ##excesd: 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