Api 如何在centos下用systemd让docker监听unix和TCP套接字
我已经使用systemd在CentOS下安装了docker(v17.06.2-ce)。 Docker工作正常,可以监听unix套接字。现在我想让docker监听Unix套接字和TCP套接字2375。因为这是一个内部开发机器,所以安全性没有问题 我浏览了一下互联网,发现了几篇文章,但仍然有一些问题 我的理解是,我有一个systemd文件(docker.service),它在没有任何参数的情况下启动dockerd。 ExecStart=/usr/bin/dockerd 然后这里有demon.json文件,我可以列出我要听的内容。 我的问题是在这里输入什么。可能是Api 如何在centos下用systemd让docker监听unix和TCP套接字,api,docker,tcp,centos,systemd,Api,Docker,Tcp,Centos,Systemd,我已经使用systemd在CentOS下安装了docker(v17.06.2-ce)。 Docker工作正常,可以监听unix套接字。现在我想让docker监听Unix套接字和TCP套接字2375。因为这是一个内部开发机器,所以安全性没有问题 我浏览了一下互联网,发现了几篇文章,但仍然有一些问题 我的理解是,我有一个systemd文件(docker.service),它在没有任何参数的情况下启动dockerd。 ExecStart=/usr/bin/dockerd 然后这里有demon.json
{
"hosts": [ "unix:///var/run/docker.sock",
"tcp://0.0.0.0:2375"
]
}
或者对于套接字激活来说是这样的吗
{
"hosts": [ "unix:///var/run/docker.sock",
"fd://"
]
}
然后我发现的第二件事是准备systemd socket,方法是提供一个文件docker.sockst,如下所示
[Unit] Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=tcp://0.0.0.0:2375
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
但这将只定义一个TCP套接字。根据一篇文章,docker将响应TCP端口,但不再响应unix套接字
如果有人能指出细节就好了。所以不要碰docker.socket文件或任何东西。Systemd有一个dropin的概念,您可以使用dropin文件覆盖部分服务 因此,首先为服务创建dropin文件夹
mkdir -p /etc/systemd/system/docker.service.d/
然后创建一个配置文件
cat > /etc/systemd/system/docker.service.d/90-docker.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375
现在您的服务也将在2375收听。我认为目前无法使用/etc/docker/daemon.json
控制主机选项。有关更多详细信息,请参阅下面的链接
cd/lib/systemd/system/
vim docker tcp.socket
docker tcp.socket
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=2375
BindIPv6Only=both
Service=docker.service
[Install]
WantedBy=sockets.target
systemctl后台程序重新加载
systemctl停止docker.service
systemctl启用docker tcp.socket
systemctl启动docker tcp.socket
systemctl启动docker.service
事实上,我刚刚在Github上为PhotonOS发布了一个公开问题的答案。我用doc markdown的说明以及等效的shell脚本创建了一个要点 它允许维护本地unix套接字以及对API的基于TCP的远程访问。与大多数指令不同,它遵循Docker支持的方法,创建Docker.socket服务并将其作为依赖项绑定到Docker服务,而不是在命令行上硬编码/或TCP或unix fd sock,或黑客攻击在每次升级时被覆盖的任何系统文件
GIST是:关于空白ExcStase=行的好提示。我以前没有注意到这种行为,但现在我看到了
mansystemd.service
中记录的。上面写着Jan 29 17:06:09 talis dev pc docker[21522]:docker:“daemon”不是docker命令。
并且不会启动。Docker版本18.09.1,内部版本4c52b90。修正:不要使用/usr/bin/docker守护进程…
而使用/usr/bin/dockerd…
。如果稍微更改ExecStart命令,这些指令或多或少适用于ubuntu。模拟/etc/systemd/system/multi-user.target.wants/docker.service
中的表单,但使用额外的-H
标志:ExecStart=/usr/bin/dockerd-H fd://--containerd=/run/containerd/containerd.sock-Htcp://0.0.0.0:2375
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=2375
BindIPv6Only=both
Service=docker.service
[Install]
WantedBy=sockets.target