如何在不重新安装 docker 的情况下启用 docker 即服务?

Dav*_*ave 6 services software-installation docker

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

但是当我尝试检查它的状态时,我收到以下错误

davea@blockshare_srvr:~$ sudo systemctl status docker
Unit docker.service could not be found.
Run Code Online (Sandbox Code Playgroud)

如何在不重新安装 docker 的情况下启用该服务?

Win*_*nix 5

2019 年 8 月 12 日更新

\n\n

为了您的systemd目标,您可能只想简单地安装常规版本docker,而不是通过snap. 从:

\n\n\n\n
\n

我们这样做有几个原因:

\n\n
    \n
  • 事实上,systemd 用于启动服务是我们不想向 snap\n 开发人员公开的 snapd 的实现细节。完全有可能在不同的发行版上或将来使用另一种机制,我们不希望 snap 开发人员必须处理转换或使 snap 只能在发行版上使用与系统
  • \n
  • snaps 可以安装在任意数量的具有不同 systemd 版本的系统上。以您描述的方式直接公开单元文件可能会导致使用单元的单元出现问题,该单元的 systemd 指令比系统上的 systemd 支持的更新\n
  • \n
  • systemd 单元规范极其丰富和灵活,暴露整个单元规范将允许 snap 以不可预测和不良的方式影响系统和其他 snap,这与 snapd\xe2\x80\x99s 围绕应用程序的设计相反\n 隔离、恢复、依赖等
  • \n
\n\n

由于上述原因,我们不打算包装整个 systemd 单元规范(正如您所说,这是不合理的),并且我们将公开功能的子集。请注意,\n 功能的子集正在根据来自该领域的反馈进行扩展和重新评估(例如,最近的计时器和您提到的线程 7)。\n 重要的是,我们希望以一种方式向开发人员公开所需的功能。 \n 与 snapd\xe2\x80\x99s 设计原则一致的方式,并在跨发行版生态系统中的任何地方\n 工作。

\n
\n\n
\n\n

使用“常规”docker 设置 Systemd

\n\n

配置 docker 以在启动时启动说:

\n\n

配置 Docker 开机启动

\n\n

当前大多数 Linux 发行版(RHEL、CentOS、Fedora、Ubuntu 16.04 及更高版本)使用 systemd 来管理系统启动时启动哪些服务。Ubuntu 14.10及以下使用upstart。

\n\n

系统

\n\n
$ sudo systemctl enable docker\n
Run Code Online (Sandbox Code Playgroud)\n\n

要禁用此行为,请改用disable。

\n\n
$ sudo systemctl disable docker\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

用 systemd 控制 Docker说:

\n\n

使用 systemd 控制 Docker

\n\n

许多 Linux 发行版使用 systemd 来启动 Docker 守护进程。本文档展示了如何自定义 Docker\xe2\x80\x99s 设置的一些示例。

\n\n

启动 Docker 守护进程

\n\n手动启动\n\n

安装 Docker 后,您需要启动 Docker 守护进程。大多数Linux发行版使用systemctl来启动服务。如果没有 systemctl,请使用 service 命令。

\n\n
    \n
  • 系统控制:

    \n\n

    $ sudo systemctl 启动 docker

  • \n
  • 服务:

    \n\n

    $ sudo 服务 docker 启动

  • \n
\n\n
\n\n

手动创建 systemd 单元文件

\n\n

在没有软件包的情况下安装二进制文件时,您可能希望将 Docker 与 systemd 集成。为此,将github 存储库中的两个单元文件(服务和套接字)安装到/etc/systemd/system.

\n\n

docker.service

\n\n
[Unit]\nDescription=Docker Application Container Engine\nDocumentation=https://docs.docker.com\nAfter=network-online.target docker.socket firewalld.service\nWants=network-online.target\nRequires=docker.socket\n\n[Service]\nType=notify\n# the default is not to use systemd for cgroups because the delegate issues still\n# exists and systemd currently does not support the cgroup feature set required\n# for containers run by docker\nExecStart=/usr/bin/dockerd -H fd://\nExecReload=/bin/kill -s HUP $MAINPID\nLimitNOFILE=1048576\n# Having non-zero Limit*s causes performance problems due to accounting overhead\n# in the kernel. We recommend using cgroups to do container-local accounting.\nLimitNPROC=infinity\nLimitCORE=infinity\n# Uncomment TasksMax if your systemd version supports it.\n# Only systemd 226 and above support this version.\n#TasksMax=infinity\nTimeoutStartSec=0\n# set delegate yes so that systemd does not reset the cgroups of docker containers\nDelegate=yes\n# kill only the docker process, not all processes in the cgroup\nKillMode=process\n# restart the docker process if it exits prematurely\nRestart=on-failure\nStartLimitBurst=3\nStartLimitInterval=60s\n\n[Install]\nWantedBy=multi-user.target\n
Run Code Online (Sandbox Code Playgroud)\n\n

docker.socket

\n\n
[Unit]\nDescription=Docker Socket for the API\nPartOf=docker.service\n\n[Socket]\n# If /var/run is not implemented as a symlink to /run, you may need to\n# specify ListenStream=/var/run/docker.sock instead.\nListenStream=/run/docker.sock\nSocketMode=0660\nSocketUser=root\nSocketGroup=docker\n\n[Install]\nWantedBy=sockets.target\n
Run Code Online (Sandbox Code Playgroud)\n