在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