我正在使用 Ubuntu 16.04。我想设置 Docker 作为服务运行。我已经安装了 docker...
davea@blockshare_srvr:~$ which docker
/snap/bin/docker
davea@blockshare_srvr:~$ /snap/bin/docker -v
Docker version 18.06.1-ce, build e68fc7a
但是当我尝试检查其状态时,出现以下错误
davea@blockshare_srvr:~$ sudo systemctl status docker
Unit docker.service could not be found.
如何在不重新安装docker的情况下启用该服务?
答案1
2019 年 8 月 12 日更新
为了实现您的systemd
目标,您可能只想安装常规版本docker
而不是通过 使用它snap
。来自:
我们这样做有几个原因:
- 使用 systemd 启动服务是 snapd 的一个实现细节,我们不想向 snap 开发人员透露。完全有可能在不同的发行版或未来使用另一种机制,我们不希望 snap 开发人员不得不处理转换或使 snap 只能在带有 systemd 的发行版上使用
- snap 可以安装在具有不同 systemd 版本的任意数量的系统上。以您描述的方式直接公开单元文件可能会导致 snap 使用具有比系统上的 systemd 支持的更新的 systemd 指令的单元时出现问题
- systemd 单元规范非常丰富且灵活,暴露整个单元规范将允许 snap 以不可预测和不良的方式影响系统和其他 snap,这与 snapd 围绕应用程序隔离、恢复、依赖等的设计背道而驰。
由于上述原因,我们不打算包装整个 systemd 单元规范(正如您所说,这样做是不合理的),并且我们只公开部分功能。请注意,功能子集正在根据来自该领域的反馈进行扩展和重新评估(例如,最近的计时器和您提到的线程 7)。重要的是,我们希望以符合 snapd 设计原则的方式向开发人员公开所需的功能,并在跨发行版生态系统的任何地方都能发挥作用。
使用“常规”docker 进行 Systemd 设置
配置 Docker 开机启动
大多数当前 Linux 发行版(RHEL、CentOS、Fedora、Ubuntu 16.04 及更高版本)使用 systemd 来管理系统启动时启动哪些服务。Ubuntu 14.10 及以下版本使用 upstart。
systemd
$ sudo systemctl enable docker
要禁用此行为,请改用 disable。
$ sudo systemctl disable docker
使用 systemd 控制 Docker
许多 Linux 发行版使用 systemd 来启动 Docker 守护进程。本文档展示了一些如何自定义 Docker 设置的示例。
启动 Docker 守护程序
手动启动安装 Docker 后,您需要启动 Docker 守护程序。大多数 Linux 发行版使用 systemctl 来启动服务。如果您没有 systemctl,请使用 service 命令。
系统控制:
$ sudo systemctl 启动 docker
服务:
$ sudo 服务 docker 启动
手动创建 systemd 单元文件
在安装没有软件包的二进制文件时,您可能希望将 Docker 与 systemd 集成。为此,请从github 存储库到/etc/systemd/system
。
docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
docker.socket
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
# If /var/run is not implemented as a symlink to /run, you may need to
# specify ListenStream=/var/run/docker.sock instead.
ListenStream=/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
答案2
docker
控制所安装的正确方法snap
是snap services docker
,如以下文章所建议的:
https://www.allprogrammingtutorials.com/tutorials/installing-docker-on-ubuntu-centos-using-snap.php
另一种方法可能是snap.
在单位名称前添加,例如sudo systemctl restart snap.docker.service
,如下所建议: