Docker – 使用SystemD和“daemon.json”启用远程HTTP API

免责声明:

在使用Ubuntu 14.04和Upstart作为init系统的旧机器上,我通过在/ etc / default / docker上定义DOCKER_OPTS来启用HTTP API.有用.

$docker version
Client:
 Version:      1.11.2
 (...)

Server:
 Version:      1.11.2
 (...)

问题:

这个解决方案在最近使用带有SystemD的Ubuntu 16.04的机器上不起作用.

如最近安装的文件/ etc / default / docker所述:

# Docker Upstart and SysVinit configuration file

#
# THIS FILE DOES NOT APPLY TO SYSTEMD
#
#   Please see the documentation for "systemd drop-ins":
#   https://docs.docker.com/engine/articles/systemd/
#
(...)

当我在Docker documentation page上检查SystemD的这个信息时,我需要填写一个daemon.json文件,但正如reference所述,有些属性不言自明,但其他属性可能不足.

话虽这么说,我正在寻求帮助来转换这个:

DOCKER_OPTS =“ – H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -G myuser –debug”

到daemon.jsonobject?

笔记

PS1:我知道daemon.json有一个debug:true默认值.

PS2:可能是组:“myuser”它将像这样或使用字符串数组.

PS3:我主要担心的是同时使用SOCK和HTTP.

编辑(8/08/2017)
阅读接受的答案后,请查看@white_gecko答案以获取有关此事项的更多信息.

最佳答案
由于文档碎片很多,很难解决这个问题.

我的第一个解决方案是创建daemon.json

{
  "hosts": [
    "unix:///var/run/docker.sock",
    "tcp://127.0.0.1:2376"
  ]
}

这不起作用此错误docker [5586]:在尝试使用服务docker restart重新启动守护程序后,无法使用文件/etc/docker/daemon.json配置Docker守护程序.
注意:错误更多,我没有复制.

但是这个错误意味着它在启动守护程序时它与daemon.json上的标志和配置冲突.

当我用服务docker状态查看它时,它是父进程:ExecStart = /usr/bin/docker daemon -H fd://.

奇怪的是因为/etc/init.d/docker上的配置不同,我认为这是服务配置.
奇怪的是,init.d上的文件确实包含对守护进程参数的任何引用-H fd://.

经过一些研究和系统目录的大量搜索,我找到了这些目录(有关此问题的讨论的帮助docker github issue #22339).

使用以下新值从/lib/systemd/system/docker.service编辑ExecStart:
/usr/bin/docker守护进程

并创建了/etc/docker/daemon.json

{
  "hosts": [
    "fd://",
    "tcp://127.0.0.1:2376"
  ]
}

终于通过服务docker start重新启动了服务,现在我获得了服务docker状态的“绿灯”.

测试了新配置:

$docker run hello-world

Hello from Docker!
(...)

和,

$curl http://127.0.0.1:2376/v1.23/info
[JSON]

我希望这能帮助像我这样有类似问题的人! 🙂

转载注明原文:Docker – 使用SystemD和“daemon.json”启用远程HTTP API - 代码日志