如何使docker在systemd的centos下监听unix和TCP socket

我使用systemd在CentOS下安装了docker(v17.06.2-ce)。 Docker工作正常,并监听unix套接字。 现在我想让docker监听Unix套接字和TCP套接字2375.由于这是一个内部开发机器安全性没有问题。

我扫描了互联网发现了几篇文章,但仍然有一些问题。

我的理解是,我有systemd文件(docker.service)启动dockerd没有任何参数。 ExecStart =的/ usr /斌/ dockerd

然后在这里有文件demon.json,我可以列出我将要听的。 我的问题是在这里input什么。 它可能是。

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

或者是这样的sockets激活这样的事情?

 { "hosts": [ "unix:///var/run/docker.sock", "fd://" ] } 

然后,我发现第二件事是通过提供一个像这样的文件docker.sockst来准备systemd套接字

 [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具有DropIns的概念,您可以使用dropin文件覆盖部分服务。

所以先创build服务的dropin文件夹

 mkdir -p /etc/systemd/system/docker.service.d/ 

然后你创build一个configuration文件

 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 

第一个ExecStart=空白原始命令,第二个ExecStart指定我们要覆盖的新命令

现在我们应该重新启动泊坞服务

 systemctl daemon-reload systemctl restart docker 

现在你的服务也将在2375听。我相信目前的主机选项不能用/etc/docker/daemon.json来控制。 请参阅下面的链接了解更多详情

https://docs.docker.com/engine/reference/commandline/dockerd/#docker-runtime-execution-options