如何使用systemd使docker在centos下监听unix和TCP套接字

时间:2017-09-13 17:34:22

标签: api docker tcp centos systemd

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

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

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

然后在这里有文件demon.json我可以列出我要听的内容。 我的问题是在这里输入什么。它可能是。

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

或者套接字激活是这样的吗?

{
       "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套接字。

如果有人可以指出细节,那就太好了。

3 个答案:

答案 0 :(得分:2)

所以不要触摸docker.socket文件或任何东西。 Systemd有DropIns的概念,你可以使用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

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

现在我们应该重启docker服务

systemctl daemon-reload
systemctl restart docker

现在您的服务也将在2375收听。我相信目前无法使用/etc/docker/daemon.json控制主机选项。有关详细信息,请参阅以下链接

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

答案 1 :(得分:0)

  1. cd /lib/systemd/system/
  2. vim docker-tcp.socket
  3. 将其粘贴到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
    
  4. systemctl daemon-reload

  5. systemctl stop docker.service
  6. systemctl enable docker-tcp.socket
  7. systemctl start docker-tcp.socket
  8. systemctl start docker.service
  9. 验证2375端口已打开     docker -H 127.0.0.1 ps     集装箱ID图像命令创建状态端口名称

答案 2 :(得分:0)

我实际上只是在Github上将这个答案发布到PhotonOS的Github上。我使用指令doc markdown以及等效的shell脚本创建了要点。

它允许维护本地unix套接字以及对API的基于TCP的远程访问。与大多数指令不同,它遵循Docker支持的方法来创建docker.socket服务并将其作为依赖项绑定到docker服务,而不是在命令行上对/或TCP或unix fd sock进行硬编码或对任何系统文件进行黑客攻击每次升级都会被覆盖。

要点位于:https://git.io/fjhhO