2017-09-13 56 views
0

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

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

我的理解是我有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://" 
       ] 
    } 

后来我发现的第二件事情是通过提供文件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 

准备systemd插座但是,这将只定义一个TCP套接字。根据一篇文章,docker将响应TCP端口,但不再是unix套接字。

如果有人能指出细节,那将会很好。

回答

1

所以不要触摸docker.socket文件或任何东西。 Systemd具有DropIns的概念,您可以使用下拉文件覆盖部分服务。

所以创建服务第一

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 

第一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

+0

好尖约空白ExecStart =行下面的链接。我之前没有注意到这种行为,但我现在看到这在'man systemd.service'中有记录。 –