Docker-使用SystemD和“启用远程HTTP API”;daemon.json“; 免责声明:
在一台使用Ubuntu14.04的旧机器上,Upstart作为init系统,我通过在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
/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
您的建议很好!我