You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu安装Docker后启动失败:docker.service加载异常及socket问题求助

Docker无法启动:docker.socket启动失败且docker.sock不存在(Ubuntu 16.04 GCP实例)

我在Ubuntu 16.04的GCP实例上成功安装了Docker,但启动服务时遇到了问题。执行sudo service docker start时抛出以下错误:

Job for docker.socket failed. See "systemctl status docker.socket" and "journalctl -xe" for details. Failed to start docker.service: Unit docker.service is not loaded properly: Invalid argument. See system logs and 'systemctl status docker.service' for details.

我的系统和Docker版本信息:

  • 系统内核:Linux instance-1 4.15.0-1029-gcp #31~16.04.1-Ubuntu SMP Fri Mar 22 13:06:42 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • Docker版本:18.09.2, build 6247962

执行sudo docker info时得到:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

查看docker.socket状态:

● docker.socket - Docker Socket for the API Loaded: loaded (/lib/systemd/system/docker.socket; enabled; vendor preset: enabled) Active: failed (Result: service-start-limit-hit) since Thu 2019-05-09 03:53:13 PDT; 5h 0min ago Listen: /var/run/docker.sock (Stream)

另外我发现/var/run/docker.sock这个文件根本不存在,有没有大佬能帮忙解决这个问题?


解决步骤

1. 重置Docker相关的systemd配置

先停止所有Docker相关服务,避免冲突:

sudo systemctl stop docker.service docker.socket

然后重新加载systemd配置,让系统识别可能的配置变更:

sudo systemctl daemon-reload

2. 检查并修复docker.socket的配置文件

打开docker.socket的系统配置文件,确认内容是否正确:

sudo nano /lib/systemd/system/docker.socket

正确的配置应该类似这样,如果有路径错误、权限设置异常,修改后保存:

[Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target

修改完成后再次重新加载systemd:

sudo systemctl daemon-reload

3. 手动创建缺失的docker.sock并设置权限

既然文件不存在,我们手动创建并配置正确的权限(这部分是Docker daemon启动时自动生成的,但异常情况下需要手动干预):

sudo touch /var/run/docker.sock
sudo chown root:docker /var/run/docker.sock
sudo chmod 0660 /var/run/docker.sock

4. 分步启动Docker服务

先启动docker.socket,再启动docker.service,避免依赖问题:

sudo systemctl start docker.socket
sudo systemctl start docker.service

检查两个服务的状态,确认是否正常运行:

systemctl status docker.socket docker.service

5. 终极方案:完全卸载后重新安装Docker

如果以上步骤都无效,可能是安装过程中出现了损坏,建议完全清理后重新安装:

# 卸载现有Docker组件
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

# 重新安装指定版本的Docker(匹配你的18.09.2版本)
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce=18.09.2~ce~3-0~ubuntu-xenial docker-ce-cli=18.09.2~ce~3-0~ubuntu-xenial containerd.io

安装完成后启动服务并设置开机自启:

sudo systemctl start docker
sudo systemctl enable docker

内容的提问来源于stack exchange,提问作者ArrchanaMohan

火山引擎 最新活动