1. 程式人生 > >解決二進位制方式安裝 docker 不能使用 systemd(systemctl) 工具管理 docker 服務的問題

解決二進位制方式安裝 docker 不能使用 systemd(systemctl) 工具管理 docker 服務的問題

一、引言

接觸 docker 已經有一段時間了,在這段時間裡面,我使用二進位制的方式安裝了最新版的 docker,完成了 docker 的私有映象庫的搭建、使用者認證的新增、映象的推送與拉取等等功能。這裡的二進位制方式安裝 docker 的方式有別於 rpm、deb 包,是 docker 官網上提到的一種類似於綠色版軟體的安裝方式,下載下來解壓出來是一個可以直接使用的 docker 軟體包,相關安裝文件連結請點選下面:
Install Docker CE from binaries

相信使用這種方式安裝 docker 的同學應該不多,我也是因為部門的要求:
1. 一定要是最新的 docker 社群版本
2.

一定要離線安裝
因此才選擇了這個非常簡便的安裝方式。

然而,這種方便的安裝方式,帶來的是 docker 與系統層面的互動功能的缺失。比如說,你想要在 RedHat 系的 linux 下使用 systemd 來管理 docker 服務,就是不可能的了。

那麼,如果我使用二進位制方式安裝的 docker,就是想要使用 systemd 來管理 docker 服務,該怎麼辦呢?

這篇部落格就是為了解決這個問題而出現的。

二、問題展現:我就想配置 docker 的開啟自啟動

現在,假想我們拿到的是一個剛剛使用二進位制方式安裝了 docker 的 RedHat 7 環境。那麼如果我們想要配置可以開機啟動 docker 服務(這樣就不用我們每次自己去開啟了),按照官方文件的提示:

Configure Docker to start on boot

我們輸入下列命令:

sudo systemctl enable docker

會很不幸的提示這麼一句話:

Failed to execute operation: No such file or directory

這是很正常的,因為我們實際上安裝的 docker 是類似綠色版的。我們想要使用系統服務工具 systemctl,就必須配置好它。

三、問題解決:從官方文件入手排坑

這個問題非常不好解決,因為中文社群相關問題太少,估計也是因為使用這種方式安裝 docker 的人太少。

資料蒐集

這篇文章其他資訊都是站在了你已經配置好了 systemd 工具的前提下,如何使用 systemd 工具的介紹,然而,最後面一段才是我們所需要的資訊:

systemd

我簡單翻譯一下:

手動建立 systemd 單元檔案
如果你是使用二進位制方式安裝的 docker,那麼你也許需要整合 docker 到 systemd 中去。為了完成這個任務,你需要安裝兩個單元檔案(service 和 socket)到 /etc/systemd/system 中去

moby

開啟連結後,按照官網的介紹,我們需要將 docker.servcie 和 docker.socket 放到我們的 /etc/systemd/system 下面即可。

但是根據我的嘗試,這樣是不行的,當你使用 systemctl start docker會提示如下提示:

A dependency job for docker.service faled. See ‘journalctl -xe’ for details.

最終解決

最後我嘗試出來的解決辦法是:
1. 製作 docker.service 和 docker.socket 檔案

你可以選擇點選我上面分享的 github 連結:
docker.service 和 docker.socket 檔案 GitHub 地址
然後按照圖示將 docker.service.rpm 檔案修改名字為 docker.service;docker.socket 則不需要改動,直接複製貼上新建一個 docker.socket 檔案即可。

也可以選擇我已經做好了的 docker.service 和 docker.socket 檔案,百度雲連結為:
連結: docker.service 和 docker.socket 檔案 密碼:zgyt

2. 將上述步驟得到的 docker.service 和 docker.socket 檔案一起放到 /etc/systemd/system 目錄下

# 拷貝進來的 docker.service 和 docker.socket 當前目錄下
$ sudo cp docker.socket /etc/systemd/system
$ sudo cp docker.service /etc/systemd/system

3. 重啟 systemctl 服務

# 先重啟 systemctl 守護程序
$ sudo systemctl daemon-reload
# 再開啟 docker 服務
$ sudo systemctl start docker

# * 如果上一行程式碼顯示失敗,那麼重啟電腦再重試上面兩行命令 *
$ sudo reboot

問題解決 ^_^

最後的最後,此時我們再想要配置 docker 服務開機自啟動,就可以執行這行命令了:

$ sudo systemctl enable docker

至此,完結撒花:)

四、總結

這個問題糾結了我一個上午的時間。因為官方文件的資訊實在是太過於簡略,簡單的根據官網來操作也會出錯。最後通過一篇討論中提到 Requires=docker.socket 需要去掉,這才想起去檢視 docker.service 和 docker.service.rpm 的區別,發現後者就是比前者少了這麼一句話。也就是這麼一個契機,我嘗試著替換 docker.service 的檔案內容為 docker.service.rpm 的檔案內容,最後問題解決。

這個問題相信每一個使用二進位制安裝 docker 的人都會遇到,希望這篇部落格能給你們一些幫助:)

To be Stronger:)