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

gra*_*fra 3 api tcp centos systemd docker

我已经使用 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"
            ]
}
Run Code Online (Sandbox Code Playgroud)

或者像这样的套接字激活?

{
       "hosts": [  "unix:///var/run/docker.sock",
                    "fd://"
                ]
    }
Run Code Online (Sandbox Code Playgroud)

然后我发现的第二件事是通过提供这样的文件 docker.sockst 来准备 systemd socket

[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
Run Code Online (Sandbox Code Playgroud)

但这只会定义一个 TCP 套接字。根据一篇文章,docker 将响应 TCP 端口,但不再响应 unix 套接字。

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

Tar*_*ani 8

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

所以先为服务创建dropin文件夹

mkdir -p /etc/systemd/system/docker.service.d/
Run Code Online (Sandbox Code Playgroud)

然后你创建一个配置文件

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
Run Code Online (Sandbox Code Playgroud)

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

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

systemctl daemon-reload
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)

现在您的服务也将在 2375 侦听。我相信目前无法使用/etc/docker/daemon.json. 请参阅以下链接了解更多详情

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