2017-09-13 39 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'中有記錄。 –