Docker-使用SystemD和“启用远程HTTP API”;daemon.json“; 免责声明:

Docker-使用SystemD和“启用远程HTTP API”;daemon.json“; 免责声明:,json,ubuntu,docker,systemd,docker-api,Json,Ubuntu,Docker,Systemd,Docker Api,在一台使用Ubuntu14.04的旧机器上,Upstart作为init系统,我通过在/etc/default/DOCKER上定义DOCKER\u OPTS来启用HTTP API。它起作用了 $ docker version Client: Version: 1.11.2 (...) Server: Version: 1.11.2 (...) 问题: 这个解决方案不适用于最新的带有SystemD的Ubuntu 16.04机器 如最近安装的文件顶部所述/etc/de

在一台使用Ubuntu14.04的旧机器上,Upstart作为init系统,我通过在
/etc/default/DOCKER
上定义
DOCKER\u 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/
#
(...)
当我在for SystemD上检查此信息时,我需要填写一个
daemon.json
文件,但如上所述,有些属性是不言自明的,但其他属性可能解释不足

也就是说,我正在寻求帮助来转换:

DOCKER_OPTS=“-Htcp://0.0.0.0:2375 -Hunix:///var/run/docker.sock -G myuser--调试“

daemon.json
对象


笔记 PS1:我知道
守护进程.json
默认设置为
debug:true

PS2:可能是
组:“myuser”
它将像这样工作,或者与字符串数组一起工作

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


编辑(2017年8月8日)
阅读已接受的答案后,查看@white_gecko的答案,了解更多关于该问题的信息

有很多零碎的文档,很难解决这个问题

我的第一个解决方案是使用

{
  "hosts": [
    "unix:///var/run/docker.sock",
    "tcp://127.0.0.1:2376"
  ]
}
{
  "hosts": [
    "fd://",
    "tcp://127.0.0.1:2376"
  ]
}
这不起作用此错误
docker[5586]:在尝试使用
服务docker restart
重新启动守护程序后,无法使用文件/etc/docker/daemon.json配置docker守护程序。 注意:关于我未能复制的错误,还有更多信息

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

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

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

在对系统目录进行了一些研究和大量搜索之后,我找到了这些目录(在讨论这个问题的帮助下)

解决方案 使用此新值编辑了
/lib/systemd/system/docker.service
中的
ExecStart
/usr/bin/docker守护进程

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

{
  "hosts": [
    "unix:///var/run/docker.sock",
    "tcp://127.0.0.1:2376"
  ]
}
{
  "hosts": [
    "fd://",
    "tcp://127.0.0.1:2376"
  ]
}
终于用
service docker start
重新启动了服务,现在我在
service docker status
上看到了“绿灯”

使用以下工具测试新配置:

$ docker run hello-world

Hello from Docker!
(...)
以及


我希望这将帮助有类似问题的人

我也遇到了同样的问题,事实上,在我看来,最简单的解决方案是使用systemd插件,它不应触及任何由系统更新过程管理的现有文件: 只需创建一个文件
/etc/systemd/system/docker.service
,它将覆盖
/lib/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
在中描述的解决方案适用于我:

一个很难解决的配置冲突的显著例子 疑难解答是指您希望指定不同的守护程序地址 从默认值。默认情况下,Docker侦听套接字。关于Debian和 Ubuntu系统使用
systemd
),这意味着
-H
标志始终是 启动
dockerd
时使用。如果在
daemon.json
,这会导致配置冲突(如上所述) 消息),Docker无法启动

要解决此问题,请创建一个新文件
/etc/systemd/system/docker.service.d/docker.conf
带有以下内容 内容,以删除启动时使用的
-H
参数 默认情况下为守护进程

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
请注意,
ExecStart=
的行实际上是必需的,否则它将失败并出现错误:

docker.service:service有多个ExecStart=设置,这仅适用于Type=oneshot服务。拒绝

创建文件后,必须运行:

sudo systemctl daemon-reload
sudo systemctl restart docker

对我来说,我在Ubuntu 18.04.1 LTS和Docker 18.06.0-ce create上工作过 /etc/systemd/system/docker.service.d/remote-api.conf 内容如下:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
[Service]
Environment="HTTP_PROXY=http://<you_proxy_ip>:<port>"
Environment="HTTPS_PROXY=https://<you_proxy_ip>:<port>/"
Environment="NO_PROXY=localhost,127.0.0.1,::1"
然后运行sudo systemctl守护进程重载和sudo systemctl restart docker 请参阅结果调用:

卷曲

如果docker在代理后面,则可能需要配置代理。 要在/etc/default/docker文件中实现此粘贴,请执行以下操作:

http_proxy="http://85.22.53.71:8080/"
https_proxy="http://85.22.53.71:8080/"
HTTP_PROXY="http://85.22.53.71:8080/"
HTTPS_PROXY="http://85.22.53.71:8080/"
# below you can list some *.enterprise_domain.com as well
NO_PROXY="localhost,127.0.0.1,::1" 
或创造 /etc/systemd/system/docker.service.d/remote-api.conf,包含以下内容:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
[Service]
Environment="HTTP_PROXY=http://<you_proxy_ip>:<port>"
Environment="HTTPS_PROXY=https://<you_proxy_ip>:<port>/"
Environment="NO_PROXY=localhost,127.0.0.1,::1"
[服务]
Environment=“HTTP\u PROXY=HTTP://:”
Environment=“HTTPS\u PROXY=HTTPS://:”
Environment=“NO_PROXY=localhost,127.0.0.1,::1”

我希望它能帮助某些人…

也许您忘记复制的错误消息是:
无法使用文件/etc/Docker/daemon.json配置Docker守护程序:以下指令被指定为标志并在配置文件中指定:hosts:(from标志:[fd://],from文件:[tcp://127.0.0.1:2375 fd://])
您不需要更改原始的
docker.service
,您可以使用systemd下拉文件,例如:
/etc/systemd/system/docker.service.d/no_fd.conf
[service]ExecStart=ExecStart=/usr/bin/dockerd
您的建议很好!我