如何更改 Docker sock 文件位置?

您是否正在寻找更改 Docker 套接字文件路径的方法?本文将为您详细讲解。

Docker 套接字是什么?

Docker 套接字文件通常位于 /var/run/docker.sock

它充当与 Docker 主守护进程(一个运行中的进程)通信的渠道。本质上,它是 Docker API 的接入点。 Docker 命令行界面(CLI)默认使用这个套接字来执行各种 Docker 命令。

接下来,我将向您演示如何调整 Docker 套接字文件的存储位置。

停止 Docker 服务

首先,如果您的系统上正在运行 Docker 服务,请务必将其停止。您可以执行 status 命令来验证服务是否已成功停止。

[email protected]:~$ sudo service docker stop
[email protected]:~$ sudo service docker status
● docker.service - Docker 应用程序容器引擎
     已加载: 已加载 (/lib/systemd/system/docker.service; 已启用; 供应商预设: 已启用)
     活动状态: 不活动 (已关闭) 自 周六 2019-11-23 15:37:00 EST; 4秒前
       文档: https://docs.docker.com
    进程: 1474 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (代码=退出,状态=0/成功)
  主 PID: 1474 (代码=退出,状态=0/成功)

11月 10 01:56:49 techblik.com dockerd[1474]: time="2019-11-10T01:56:49-05:00" level=error msg="2019/11/10 06:56:49 进入 go-plugins-helper
11月 10 01:56:49 techblik.com dockerd[1474]: time="2019-11-10T01:56:49-05:00" level=error msg="time="2019-11-10T06:56:49Z" level=debug msg=
11月 10 01:56:49 techblik.com dockerd[1474]: time="2019-11-10T01:56:49-05:00" level=error msg="time="2019-11-10T06:56:49Z" level=error msg=
11月 10 01:57:23 techblik.com dockerd[1474]: time="2019-11-10T01:57:23.635519865-05:00" level=info msg="容器 3141793b98f315dc90a57d81006
11月 10 01:57:24 techblik.com dockerd[1474]: time="2019-11-10T01:57:24.091797103-05:00" level=info msg="忽略事件" module=libcontainerd
11月 23 15:36:56 techblik.com systemd[1]: 正在停止 Docker 应用程序容器引擎...
11月 23 15:36:56 techblik.com dockerd[1474]: time="2019-11-23T15:36:56.992795411-05:00" level=info msg="正在处理信号 'terminated'"
11月 23 15:36:58 techblik.com dockerd[1474]: time="2019-11-23T15:36:58.234014533-05:00" level=info msg="忽略事件" module=libcontainerd
11月 23 15:37:00 techblik.com dockerd[1474]: time="2019-11-23T15:37:00.403572098-05:00" level=info msg="忽略事件" module=libcontainerd
11月 23 15:37:00 techblik.com systemd[1]: 已停止 Docker 应用程序容器引擎。

编辑 docker.conf 和 docker.socket 文件

接下来,我将演示如何将套接字文件的默认位置从 /var/run/docker.sock 更改为 /home/techblik.com/docker.sock

  • 首先,您需要编辑位于 /etc/init/ 目录下的 docker.conf 文件,并将 DOCKER_SOCKET 路径修改为您想要的新位置。
[email protected]:~$ sudo gedit /etc/init/docker.conf

description "Docker daemon"

start on (filesystem and net-device-up IFACE!=lo)
stop on runlevel [!2345]

limit nofile 524288 1048576

# Having non-zero limits causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
limit nproc unlimited unlimited

respawn

kill timeout 20

pre-start script
# see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount
if grep -v '^#' /etc/fstab | grep -q cgroup 
|| [ ! -e /proc/cgroups ] 
|| [ ! -d /sys/fs/cgroup ]; then
exit 0
fi
if ! mountpoint -q /sys/fs/cgroup; then
mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
fi
(
cd /sys/fs/cgroup
for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do
mkdir -p $sys
if ! mountpoint -q $sys; then
if ! mount -n -t cgroup -o $sys cgroup $sys; then
rmdir $sys || true
fi
fi
done
)
end script

script
# modify these in /etc/default/$UPSTART_JOB (/etc/default/docker)
DOCKERD=/usr/bin/dockerd
DOCKER_OPTS=
if [ -f /etc/default/$UPSTART_JOB ]; then
. /etc/default/$UPSTART_JOB
fi
exec "$DOCKERD" $DOCKER_OPTS --raw-logs
end script

# Don't emit "started" event until docker.sock is ready.
# See https://github.com/docker/docker/issues/6647
post-start script
DOCKER_OPTS=
DOCKER_SOCKET=
if [ -f /etc/default/$UPSTART_JOB ]; then
. /etc/default/$UPSTART_JOB
fi

if ! printf "%s" "$DOCKER_OPTS" | grep -qE -e '-H|--host'; then
DOCKER_SOCKET=/home/techblik.com/docker.sock
else
DOCKER_SOCKET=$(printf "%s" "$DOCKER_OPTS" | grep -oP -e '(-H|--host)W*unix://K(S+)' | sed 1q)
fi

if [ -n "$DOCKER_SOCKET" ]; then
while ! [ -e "$DOCKER_SOCKET" ]; do
initctl status $UPSTART_JOB | grep -qE "(stop|respawn)/" && exit 1
echo "Waiting for $DOCKER_SOCKET"
sleep 0.1
done
echo "$DOCKER_SOCKET is up"
fi
end script
  • 接下来,编辑 /lib/systemd/system/ 目录下的 docker.socket 文件,同样更新套接字文件的位置。
[email protected]:~$ sudo gedit /lib/systemd/system/docker.socket

[Unit]

Description=Docker API 的套接字

PartOf=docker.service

[Socket]

ListenStream=/home/techblik.com/docker.sock

SocketMode=0660

SocketUser=root

SocketGroup=docker

[Install]

WantedBy=sockets.target

完成上述编辑后,请执行以下命令以更新更改,使新的套接字文件位置生效。

[email protected]:~$ sudo systemctl daemon-reload

启动 Docker 服务

现在,启动 Docker 服务,并验证其状态。您将在终端输出的状态日志的末尾看到 Docker 套接字文件的更新路径。

[email protected]:~$ sudo service docker start
[email protected]:~$ sudo service docker status

docker.service - Docker 应用程序容器引擎
     已加载: 已加载 (/lib/systemd/system/docker.service; 已启用; 供应商预设: 已启用)
     活动状态: 活动 (运行中) 自 周六 2019-11-23 15:39:36 EST; 3秒前
       文档: https://docs.docker.com
   主 PID: 8840 (dockerd)
    任务: 17
     内存: 47.6M
      CGroup: /system.slice/docker.service
             └─8840 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

11月 23 15:39:35 techblik.com dockerd[8840]: time="2019-11-23T15:39:35.091941184-05:00" level=warning msg="您的内核不支持 cgroup rt 运行时"
11月 23 15:39:35 techblik.com dockerd[8840]: time="2019-11-23T15:39:35.093149218-05:00" level=info msg="正在加载容器:开始。"
11月 23 15:39:35 techblik.com dockerd[8840]: time="2019-11-23T15:39:35.957842188-05:00" level=info msg="默认桥 (docker0) 分配的 IP 地址为 172.17.0.0/16。守护进程
11月 23 15:39:36 techblik.com dockerd[8840]: time="2019-11-23T15:39:36.078753190-05:00" level=info msg="正在加载容器:完成。"
11月 23 15:39:36 techblik.com dockerd[8840]: time="2019-11-23T15:39:36.664727326-05:00" level=info msg="Docker 守护进程" commit=481bc77 graphdriver(s)=overlay2 version=18.09.6
11月 23 15:39:36 techblik.com dockerd[8840]: time="2019-11-23T15:39:36.817929464-05:00" level=error msg="群集因错误退出:在 /var/lib/do 中加载 TLS 证书时出错
11月 23 15:39:36 techblik.com dockerd[8840]: time="2019-11-23T15:39:36.820439024-05:00" level=error msg="群组件无法启动" error="在加载 TLS 证书时出错
11月 23 15:39:36 techblik.com dockerd[8840]: time="2019-11-23T15:39:36.820821712-05:00" level=info msg="守护进程已完成初始化"
11月 23 15:39:36 techblik.com systemd[1]: 已启动 Docker 应用程序容器引擎。
11月 23 15:39:36 techblik.com dockerd[8840]: time="2019-11-23T15:39:36.883382952-05:00" level=info msg="API 监听于 /home/techblik.com/docker.sock"

执行 ls 命令,查看新路径下是否存在 docker.sock 文件,这确认了文件在 Docker 服务启动时已成功创建。

[email protected]:~$ ls -l
total 466832
-rw-r--r-- 1 techblik.com techblik.com 0 Oct 23 05:32 ]
drwxr-xr-x 9 tomcat tomcat 4096 Nov 18 14:30 apache-tomcat-9.0.27
-rw-r--r-- 1 techblik.com techblik.com 10982406 Oct 7 06:21 apache-tomcat-9.0.27.tar.gz
drwxr-xr-x 8 techblik.com techblik.com 4096 Oct 23 06:05 chef-repo
-rw-r--r-- 1 techblik.com techblik.com 252269838 Jul 1 15:16 chef-server-core_13.0.17-1_amd64.deb
-rw-r--r-- 1 techblik.com techblik.com 129713682 Dec 27 2018 chef-workstation_0.2.43-1_amd64.deb
drwxr-xr-x 2 techblik.com techblik.com 4096 Oct 23 2018 Desktop
-rw-r--r-- 1 techblik.com techblik.com 726 Jul 27 15:10 Dockerfile
srw-rw---- 1 root docker 0 Nov 23 15:39 docker.sock
drwxr-xr-x 2 techblik.com techblik.com 4096 Oct 23 2018 Documents
drwxr-xr-x 2 techblik.com techblik.com 4096 Jul 20 18:20 Downloads
-rw-r--r-- 1 techblik.com techblik.com 8980 Oct 23 2018 examples.desktop

您已成功更改 Docker 套接字文件的位置。

如果您希望快速学习 Docker,可以考虑这个速成课程

喜欢这篇文章吗?请分享给其他人,让更多人了解如何修改 Docker 套接字路径。