我懂你遇到的情况了——你用 snap 安装的 Docker,结果系统里找不到 systemctl 命令,没法像普通 apt/yum 安装的 Docker 那样用 systemctl start docker 来启动服务。
这其实不是 Docker 本身的问题,而是 snap 安装方式systemctl 管理方式 的机制不一样。


1. 为什么 snap 安装的 Docker 没有 systemctl

  • systemctlsystemd 提供的服务管理命令,用于管理 /etc/systemd/system//lib/systemd/system/ 下的系统服务。
  • snap 包 是一个沙箱化的应用分发格式,它会自带运行所需的依赖,不会像 apt 安装那样往 /etc/systemd/system/ 注册 systemd 服务。
  • 所以用 snap 装的 Docker,默认不会生成 docker.service,自然也就不能用 systemctl 来启动/停止。

2. snap 安装的 Docker 怎么启动

snap 应用有自己的启动方式:

① 查看 Docker snap 服务状态

snap services docker

可能会看到类似:

Service         Startup  Current
docker.dockerd  enabled  active

② 启动/停止/重启 Docker(snap 方式)

sudo snap start docker
sudo snap stop docker
sudo snap restart docker

③ 设置开机自启

sudo snap enable docker

④ 关闭开机自启

sudo snap disable docker

3. 如果想继续用 systemctl 管理 Docker

那就不要用 snap 安装,而是用官方 apt 仓库安装 Docker:

# 卸载 snap 版 Docker
sudo snap remove docker

# 更新 apt 索引
sudo apt update

# 安装依赖
sudo apt install ca-certificates curl gnupg

# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 添加 Docker apt 仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 用 systemctl 启动并开机自启
sudo systemctl enable --now docker

# 验证
docker --version
sudo docker run hello-world

这样安装的 Docker 就会有 /lib/systemd/system/docker.service,可以正常用:

sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl restart docker

4. 总结

  • snap 安装 Docker:轻量、隔离,但不走 systemd,所以没有 systemctl 管理命令,要用 snap start/stop/restart docker
  • apt 安装 Docker:会注册 systemd 服务,能继续用 systemctl 管理。
  • 如果你习惯用 systemctl,建议换回 apt 安装;如果只是临时用 Docker,保留 snap 版也行,只是启动方式不一样。

如果你愿意,我可以帮你一步步把 snap 版 Docker 换成 apt 版,并顺手帮你配置好 Docker 免 sudo 运行,这样以后就可以直接用 docker run ... 而不用加 sudo。
要帮你换成 apt 版吗?这样就能用 systemctl 了。

标签: none

添加新评论