在目前雲端運算和容器化的浪潮下,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 dockerJob 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, , 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.
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中文網其他相關文章!