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

免责声明:

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

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

问题:

这个解决scheme不适用于带有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/ # (...) 

当我在SystemD的Docker文档页面上检查这些信息时,我需要填写一个daemon.json文件,但是如参考文献中所述 ,有一些属性是不言而喻的,但是其他的可能会被解释。

这就是说,我正在寻求帮助来转换这一点:

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

daemon.json对象?


笔记

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

PS2:可能是这个group: "myuser"它可以像这样工作,也可以用一串string。

PS3:我主要关心的是同时使用SOCK和HTTP。


编辑(8/08/2017)在阅读接受的答案后,请检查@white_gecko答案,以获得更多关于此事的意见。

由于大量零散的文档,很难解决这个问题。

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

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

这不起作用这个错误docker[5586]: unable to configure the Docker daemon with file /etc/docker/daemon.json后尝试重新启动与service docker restart守护程序。 注:错误更多的是我没有复制。

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

当我用service docker status查看它时,这是父进程: ExecStart=/usr/bin/docker daemon -H fd://

这很奇怪,因为它与/etc/init.d/docker上的配置不同,我认为这是服务配置。 这个奇怪的部分是init.d上的文件确实包含对daemon参数的任何引用,既不是-H fd://

经过一些研究和系统目录的大量搜索后,我找到了这些目录(在这个问题上的讨论帮助docker github问题#22339 )。

/usr/bin/docker daemon/lib/systemd/system/docker.service编辑ExecStart

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

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

最后重启了服务service docker start的服务,现在我得到了service docker status的“绿灯”。

测试新的配置:

 $ docker run hello-world Hello from Docker! (...) 

和,

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

我希望这会帮助有类似问题的人! 🙂

我有同样的问题,实际上在我的眼中,最简单的解决方案应该不会触及任何由系统更新过程管理的现有文件,以便使用systemd插件:只需创建一个文件/etc/systemd/system/docker.service ,它将覆盖/etc/systemd/system/docker.service中服务的特定部分。

在这种情况下,/ /etc/systemd/system/docker.service的内容是:

 [Service] ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H=tcp://127.0.0.1:2375 -H=fd:// 

(你甚至可以创建一个包含多个文件的目录docker.service.d来覆盖不同的参数。)

添加刚刚运行的文件后:

 $ sudo systemctl daemon-reload $ sudo systemctl restart docker