一、背景
安裝完docker和containerd之后,嘗試重啟docker的時候,報錯如下:
systemctl restart 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" 查看錯誤詳情:
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
[root@emc34 ~]# systemctl status docker.service
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)Active: failed (Result: exit-code) since Mon 2023-08-14 09:00:14 CST; 13s agoDocs: http://docs.docker.comProcess: 1866 ExecStart=/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIES (code=exited, status=1/FAILURE)Main PID: 1866 (code=exited, status=1/FAILURE)Aug 14 09:00:14 emc34 systemd[1]: Starting Docker Application Container Engine...
Aug 14 09:00:14 emc34 dockerd-current[1866]: unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives ar...son-file)
Aug 14 09:00:14 emc34 systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Aug 14 09:00:14 emc34 systemd[1]: Failed to start Docker Application Container Engine.
Aug 14 09:00:14 emc34 systemd[1]: Unit docker.service entered failed state.
Aug 14 09:00:14 emc34 systemd[1]: docker.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
這里給出了錯誤原因:
Aug 14 09:00:14 emc34 dockerd-current[1866]: unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives ar…son-file)
雖然/etc/docker/daemon.json文件內容已在多個機器上配置過,但我還是再檢查了下json格式是否合法,其次看地址是否能通。
最后簡化到最后這個樣子,仍舊是重啟docker失敗。
{"log-driver": "json-file","log-opts": {"max-size": "100m","max-file": "3","labels": "production_status","env": "os,customer"}
}
排除不是daemon.json的問題,索性我不刪除該配置文件,這時候重啟docker就成功了。
可還是不知道啥原因。。。
困擾了好久,,,
因為我的機器環境,除了需安裝docker外, 還要求docker-compose。
當要安裝docker-comose的時候,會要求docker的版本與之匹配才行。
這會發現docker的版本非常低,于是又后文的docker升級。
通過本文,也提醒我們,當出現我這樣的低級錯誤時,檢查下自己的docker版本,及時更新版本是你最好的選擇!!
二、升級docker
1、刪除舊版本
# 停止docker服務
> systemctl stop docker# 查看當前版本
> rpm -qa | grep docker
docker-compose-plugin-2.20.2-1.el7.x86_64
docker-buildx-plugin-0.11.2-1.el7.x86_64
docker-ce-cli-24.0.5-1.el7.x86_64
docker-ce-24.0.5-1.el7.x86_64
docker-ce-rootless-extras-24.0.5-1.el7.x86_64#卸載軟件包
yum erase docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine \docker-ce# 刪除相關配置文件
find /etc/systemd -name '*docker*' -exec rm -f {} \;
find /etc/systemd -name '*docker*' -exec rm -f {} \;
find /lib/systemd -name '*docker*' -exec rm -f {} \;#刪除已有的鏡像和容器
rm -rf /var/lib/docker
rm -rf /var/run/docker
2、安裝新版本
# 軟件包安裝
yum install -y yum-utils device-mapper-persistent-data lvm2# 添加yum源
yum-config-manager \
--add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 安裝最新版本
yum install docker-ce -y
- 查看docker版本
[root@emc34 opt]# docker version
Client: Docker Engine - CommunityVersion: 24.0.5API version: 1.43Go version: go1.20.6Git commit: ced0996Built: Fri Jul 21 20:39:02 2023OS/Arch: linux/amd64Context: defaultServer: Docker Engine - CommunityEngine:Version: 24.0.5API version: 1.43 (minimum version 1.12)Go version: go1.20.6Git commit: a61e2b4Built: Fri Jul 21 20:38:05 2023OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.6.22GitCommit: 8165feabfdfe38c65b599c4993d227328c231fcarunc:Version: 1.1.8GitCommit: v1.1.8-0-g82f18fedocker-init:Version: 0.19.0GitCommit: de40ad0
3、設置docker
- 啟動并開機自啟
> systemctl start docker> systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
- 配置/etc/docker/daemon.json
這里就略去。其實就是配置你的私有倉庫地址。
三、安裝docker-compose
- 參考官網https://docs.docker.com/compose/install/standalone/
[root@emc34 bin]# curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose[root@emc34 bin]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose[root@emc34 bin]# docker-compose version
-bash: /usr/local/bin/docker-compose: Permission denied
解決辦法:
chmod +x /usr/local/bin/docker-compose
再查看其版本:
[root@emc34 opt]# docker-compose version
Docker Compose version v2.20.3
四、總結
特別想發出一點感想,在沒有安裝docker-comose前,無論也沒想到,daemon.json配置異常竟是因為docker版本過低導致。
本文對安裝docker及docker-compose的過程進行了一個記錄,希望對你有幫助。