您是否正在寻找更改 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 套接字路径。