我使用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套接字。
如果有人可以指出细节,那就太好了。
答案 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)
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 daemon-reload
systemctl stop docker.service
systemctl enable docker-tcp.socket
systemctl start docker-tcp.socket
systemctl start docker.service
答案 2 :(得分:0)
我实际上只是在Github上将这个答案发布到PhotonOS的Github上。我使用指令doc markdown以及等效的shell脚本创建了要点。
它允许维护本地unix套接字以及对API的基于TCP的远程访问。与大多数指令不同,它遵循Docker支持的方法来创建docker.socket服务并将其作为依赖项绑定到docker服务,而不是在命令行上对/或TCP或unix fd sock进行硬编码或对任何系统文件进行黑客攻击每次升级都会被覆盖。
要点位于:https://git.io/fjhhO