【问题标题】:Starting Docker as Daemon on Ubuntu在 Ubuntu 上将 Docker 作为守护进程启动
【发布时间】:2014-10-01 09:08:30
【问题描述】:

已经成功使用 Docker 几个星期了,但是今天当我按照一组说明进行操作时,建议在 /etc/init/docker.conf 的 docker 配置文件中添加以下两行:

limit memlock unlimited unlimited
limit nofile 262144

然后它建议使用sudo /etc/init.d/docker restart 重新启动 Docker。当我在 Ubuntu 14.04 下执行此操作时,它报告说:

  • Docker 是通过 upstart 管理的,尝试使用 service docker restart

我尝试了sudo service docker restart,它向其报告:

停止:未知工作:码头工人

开始:未知工作:码头工人

现在我被 docker 守护进程卡住了!我尝试重新启动,但它仍然没有运行,当运行像 sudo docker version 这样简单的东西时,我得到:

Client version: 1.2.0
Client API version: 1.14
Go version (client): go1.3.1
Git commit (client): fa7b24f
OS/Arch (client): linux/amd64
2014/10/01 09:57:45 Get http:///var/run/docker.sock/v1.14/version: dial unix /var/run/docker.sock: no such file or directory

为了解决问题,我尝试在命令行上启动 docker 守护进程:

sudo docker -d

在另一个终端窗口中,我现在可以正常运行 Docker。太好了,但我如何让它再次正常启动?我还注意到我有两个 docker 配置文件:

/etc/init/docker.conf
/etc/init/docker.io.conf

它们看起来像 DUP。它们是多余的吗?我应该看哪一个?两者都需要吗?

我还注意到,当我运行sudo service --status-all |grep docker 时,我将dockerdocker.io 都列为列出的服务。长大了。

【问题讨论】:

  • 请注意,我真的不了解 upstart 的机制,我怀疑这更多的是暴发户问题而不是 docker 问题。

标签: ubuntu docker


【解决方案1】:

有多个流行的存储库为 Ubuntu 提供 docker 包。 docker.io 包(很可能)来自 Ubuntu 存储库。另一个流行的是http://get.docker.io/ubuntu,它提供了一个包lxc-docker(我正在运行后者,因为它可以更快地发布更新)。确保只安装了一个包。不太确定删除包是否能正确清理。如果sudo service docker restart 仍然不起作用,您可能需要在 /etc/ 中手动清理。

【讨论】:

  • 既然你这么说,我记得我在 Docker 上也“快速跟踪”,这几乎肯定是我有两个版本的原因。遗憾的是我从来没有写下我做了什么,所以我想今天早上我会对其进行逆向工程。
  • 我也会再次尝试sudo service docker restart,但我预计不会有任何改变。当您说“在/etc 中手动清理时,您能理解一下您的意思吗?我怀疑我需要去那里,但这是一个我不太了解的领域。
  • 顺便说一句,在/etc/apt/sources.list.d/ 中,我有一个指向http://get.docker.io/ubuntu 的“docker.list”和“docker.list.save”文件。于是,这个谜团解开了。我不知道“docker.list.save”文件的功能但是这个目录中的其他文件似乎也有这个sidecar文件所以我认为这是正常的?
  • 好吧,我将把它标记为正确答案......我只是从 /etc/init/etc/default 中删除了 docker.io 引用(以及整晚的睡眠)和现在sudo service docker start 工作正常。
  • sudo service docker restart 为我工作并通过 sudo service docker status 检查状态。
【解决方案2】:

我在 14.04 使用 docker 1.9.1 遇到了同样的问题。

当我使用 sudo 时,upstart 服务命令确实有效,即使我是 root:

$ whoami
root
$ service docker status
status: Unbekannter Auftrag: docker

$ sudo service docker status
docker start/running, process 7394

这似乎取决于环境变量。

service docker status 在使用 su - 成为 root 时有效,但仅在使用 su 时无效:

$ su
Password:
$ service docker status
status: unknown job: docker
$ exit
$ su -
Password:
$ service docker status
docker start/running, process 2342

【讨论】:

  • 这就是su - rootsu root的区别。如果以su root 登录,sudo service docker status 是唯一的方法。如果以su - root 登录,service docker status 应该可以正常工作!
【解决方案3】:

这个问题确实花了我几个小时。

我的系统是 Ubuntu 14.04,我通过sudo apt-get install docker 安装了 docker,并输入了一些导致问题的其他命令。

  1. 我谷歌“未知工作:docker.io”,答案没有生效。

  2. 我在/etc/init.d/寻找“未知工作”的原因,没有找到正确的答案。

  3. 我在/etc/init.d/寻找调试脚本的方法,没有找到合适的答案。

  4. 然后,我做了一个干净的:

    1. sudo apt-get remove docker.io
    2. 通过find / -name "*docker*" 管理每个可疑文件,例如/etc/init/docker.io.conf/etc/init.d/docker.io
  5. 关注最新的官方文档:https://docs.docker.com/installation/,有很多过时的文档可能会产生误导。

终于解决了问题。

注意:如果你在中国,由于 GFW,你可能需要设置 https_proxy 从https://get.docker.com/ 安装 docker。

【讨论】:

    【解决方案4】:

    我知道这个问题已经得到解答,但是发生这种情况的原因可能是因为您没有将用户名添加到 docker 组。

    以下是执行此操作的步骤:

    如果 docker 组不存在,则添加它:

    sudo groupadd docker
    

    将连接的用户${USER}添加到docker组。更改用户名以匹配您的首选用户:

    sudo gpasswd -a ${USER} docker
    

    重启 Docker 守护进程:

    sudo service docker restart
    

    如果您使用的是 Ubuntu 14.04-15.10*,请改用 docker.io:

    sudo service docker.io restart
    

    (如果您使用的是 Ubuntu 16.04,则该服务被简单地命名为“docker”)

    执行newgrp docker 或注销/登录以激活对组的更改。

    【讨论】:

      【解决方案5】:

      我在 ubuntu 14.04 上遇到了同样的问题 这是一个解决方案

      sudo service docker start
      

      或者你可以列出图片

      docker images
      

      【讨论】:

        【解决方案6】:

        我有同样的问题,它是由不安全的注册表行引起的: /etc/default/docker

        【讨论】:

          猜你喜欢
          • 2019-07-04
          • 1970-01-01
          • 1970-01-01
          • 2012-11-23
          • 2013-03-09
          • 1970-01-01
          • 1970-01-01
          • 2016-10-26
          • 1970-01-01
          相关资源
          最近更新 更多