Failed to enable unit: Unit file docker.service does not exist.
1. 问题原因
笔者问题的产生是因为在ubuntu20.04下采用snapd
安装的docker
,因此
systemctl restart docker.service
systemd
并不能找到守护进程docker.service
同时使用docker
命令时还会产生若干连接的权限问题
笔者环境:
OS:Ubuntu20.04 LTS
软件安装途径:snap
2. 解决方法
- 对于
snapd
安装的软件,我们需要使用snap
命令
sudo snap disable docker
sudo snap enable docker
sudo snap restart docker
- 为了使
docker
可以有更高的权限,避免很多不必要的麻烦,我们可以手动将docker
以用户的形式启动
# 添加用户组
sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker
sudo snap disable docker
sudo snap enable docker
使用 Docker 运行容器(和应用程序)意味着运行 Docker 守护进程。root除非您选择 无root模式,否则此守护程序需要特权,因此您应该了解一些重要的细节。
首先,只有受信任的用户才有权控制您的 Docker 守护进程。这是一些强大的 Docker 功能的直接结果。具体来说,Docker 允许您在 Docker 主机和来宾容器之间共享目录;它允许您在不限制容器访问权限的情况下执行此操作。这意味着你可以启动一个容器,其中的/host目录就是/你主机上的目录;并且容器可以不受任何限制地更改主机文件系统。这类似于虚拟化系统允许文件系统资源共享的方式。没有什么可以阻止您与虚拟机共享根文件系统(甚至根块设备)。
3. snapd与systemd
snap 是 Canonical 为使用 Linux 内核和 systemd init 系统的操作系统开发的软件打包和部署系统。这些被称为 snap 的软件包和使用它们的工具 snapd 可以在一系列的 Linux 发行版中使用,并允许上游软件开发者直接向用户发布他们的应用程序。
Snap 管理自己的服务,无需手动干预。但是,经验丰富的管理员可能希望与 snap 的服务进行交互,以帮助改进其与本地环境的集成。因此,snapd 提供了一组命令来允许检查 snap 的服务并更改其状态。
snap对于守护进程的命令
守护程序 (管理服务):
command | function |
---|---|
services | 查询服务状态 |
start | 启动服务 |
stop | 停止服务 |
restart | 重启服务 |
logs | 检索服务日志 |
disable | 禁用系统中的一个 snap |
enable | 在系统中启用一个 snap |
snap也归systemd托管,也即是systemd是更底层的守护程序管理,只是snap安装的软件便捷的由snap直接管理