惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
B
Blog
博客园 - Franky
H
Help Net Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
云风的 BLOG
云风的 BLOG
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
宝玉的分享
宝玉的分享
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
V
V2EX
Martin Fowler
Martin Fowler
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 mysql | 线程上限问题处理 麒麟 7.6 安装谷歌 OTP 认证模块 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | 自动更新系统代理 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist shell | 检测网站存活并自动钉钉告警 Zabbix | 监控端口连通性并自动追踪 TCP 路由 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小
docker | 守护进程的远程调用
lvbibir · 2019-08-01 · via lvbibir's Blog

1 环境准备

主机版本为 Centos7.4,docker 版本为 docker-ce-18.09.7-3.el7.x86_64

  • node1: 192.168.0.111
  • node2: 192.168.0.107
  • 两台安装 docker 的环境
  • 保证两台主机上的 docker 的 Client API 与 Server APi 版本一致

2 修改配置文件

修改 daemon.json 配置文件,添加 label,用于区别两台 docker 主机

node1:

[root@localhost ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],    
"labels": ["-label nodeName=node1"]          #添加label
}

查看效果

[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker info

test

node2:

test

3 修改守护进程的通信方式

修改通信方式共有三种方式:

  1. 修改 daemon.json 文件,添加 host 键值对
    • 添加:"hosts": ["tcp://0.0.0.0:2375"]
    • 开放本机 ip 的 2375 端口,可以让其他 docker 主机的 client 进行连接
  2. 修改 /lib/systemd/system/docker.service 文件,添加 -H 启动参数
    • 修改:ExecStart=/usr/bin/docker -H <tcp://0.0.0.0:2375>
  3. 使用 dokcerd 启动 docker,添加 -H 参数
    • dockerd -H <tcp://0.0.0.0:2375>

Centos7 中/etc/docker/daemon.json 会被 docker.service 的配置文件覆盖,直接添加 daemon.json 不起作用

所以我使用的是第二种方式

node1:

[root@localhost ~]# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/docker -H tcp://0.0.0.0:2375 
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# ps -ef | grep docker
root       5775      1  3 23:17 ?        00:00:00 /usr/bin/dockerd -H tcp://0.0.0.0:2375
root       5779   5775  0 23:17 ?        00:00:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
root       5879   3919  0 23:17 pts/1    00:00:00 grep --color=auto docker

4 远程访问

node2:

[root@localhost ~]# curl http://192.168.0.111:2375/info

在这里插入图片描述

[root@localhost ~]# docker -H tcp://192.168.0.111:2375 info

在这里插入图片描述

如果频繁使用 -H 选项未免太过于麻烦,可以修改 DOCKER_HOST 这个环境变量的值,node2 就可以像使用本地的 docker 一样来远程连接 node1 的守护进程

[root@localhost ~]# export DOCKER_HOST="tcp://192.168.0.111:2375"
[root@localhost ~]# docker info

在这里插入图片描述

当无需再远程连接 node1 的守护进程时,将 DOCKER_HOST 环境变量置空即可

[root@localhost ~]# export DOCKER_HOST=""
[root@localhost ~]# docker info

在这里插入图片描述

node1:

因为 node1 设置了修改 Client 与守护进程的通信方式,所以本地无法再通过默认的 socket 进行连接,必须使用 -H 选项通过 tcp 来进行连接,也可以通过 DOCKER_HOST 来修改

[root@localhost ~]# docker info
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@localhost ~]# docker -H 0.0.0.0:2375 info

如果本机依旧希望使用默认的 socket 进行连接,可以在 docker.service 中再添加一个 -H 选项

[root@localhost ~]# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# ps -ef | grep docker
root       6462      1  2 23:40 ?        00:00:00 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
root       6467   6462  0 23:40 ?        00:00:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
root       6567   3919  0 23:40 pts/1    00:00:00 grep --color=auto docker
[root@localhost ~]# docker info

以上