MacOS下解决宿主机和docker容器之间网络互通
docker在Mac下使用非常方便,官网提供了desktop版本的可视化软件,甚至还十分贴心地集成好了k8s套件。
然而如果想同时部署和使用多个容器,每个容器不使用127.0.0.1地址,而是各自有ip,如使用172.17.0.x网段,则需要解决从宿主机到各个容器的网络通信。
如果是使用其他Linux系统的用户则不用担心这个问题,Linxu系统会自动帮我们处理好ip之间的互通(宿主机和各个容器之间)。而Mac想要直接访问容器的ip,则需要曲线救国,通过搭建一个vpn服务,然后通过vpn再去和容器的网段互联。
经过尝试openvpn成为了最佳的解决方案,github的项目地址为:docker-openvpn-kube-for-mac
其中网络连通的原理,下图所示,openvpn作为一个转接的桥梁。
根据官网项目描述,它是可以适用于Mac下的docker和Kubernetess:
该容器(openvpn)在Docker For Mac容器和主机Mac本身之间创建VPN网络。它使您可以直接与作为在IP 172.17.0.0/16上运行的Docker容器运行的服务进行通信,还可以提供到Kubernetess Pod的直接路由以及默认情况下在网络10.1.0.0/16和10.96.0.0/16和10.101上运行的服务的直接路由.0.0 / 16
然后依次顺序执行下列命令去创建vpn和vpn的配置。
1.初始化一个ovpn数据容器,用以保存配置文件和凭证。
docker volume create --name ovpn-data
docker run -v ovpn-data:/etc/openvpn --rm onedata/docker-openvpn-kube-for-mac:1.3.0 ovpn_genconfig -u udp://localhost
2.创建CA。
docker run -v ovpn-data:/etc/openvpn --rm -it onedata/docker-openvpn-kube-for-mac:1.3.0 ovpn_initpki
3.运行vpn server。
docker run --dns 8.8.8.8 --restart=always -v ovpn-data:/etc/openvpn --name docker-openvpn-kube-for-mac -d -p 1194:1194/udp --cap-add=NET_ADMIN onedata/docker-openvpn-kube-for-mac:1.3.0
4.创建一个不含秘钥的客户端凭证。
docker run -v ovpn-data:/etc/openvpn --rm -it onedata/docker-openvpn-kube-for-mac:1.3.0 easyrsa build-client-full DockerForMac nopass
5.使用嵌入式证书检索客户端配置。
docker run -v ovpn-data:/etc/openvpn --rm onedata/docker-openvpn-kube-for-mac:1.3.0 ovpn_getclient DockerForMac > ~/Downloads/DockerForMac.ovpn
上面这一步生成的DockerForMac.ovpn配置需要在Tunnelblink里面使用。Tunnelblink是一款开源免费的针对MacOS的OpenVPN图形化客户端,可以非常方便地使用openvpn配置来连接网络服务。下载地址在此:Tunnelblink下载,可以直接下载使用。
下载并安装后Tunnelblink(下载dmg包-双击安装-选择 已有网络配置),运行它,然后再到终端执行如下命令来添加网络配置:
open ~/Downloads/DockerForMac.ovpn
如此这番操作,就可以直接通过宿主机去访问docker容器实例的ip了,使用ping命令也能ping通。
Tips:
开启Tunnelblink的dockerForMac后可能导致您的有些网页无法打开,本人环境下实测关闭Tunnelblink的DNS功能即可。
MacOS下解决宿主机和docker容器之间网络互通相关推荐
- 宿主机和docker容器之间的文件拷贝
1.从容器里面拷文件到宿主机 在宿主机里面执行以下命令: docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 示例: 假设容器名为nginx,要从容器里面拷贝的文件路为 ...
- 容器安装java_在docker容器中安装Java(从宿主机向docker容器中拷贝文件)
操作系统 [root@Optimus /]# uname -a Linux Optimus 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2 ...
- 6. 修改docker端口 (映射宿主机和docker容器中的端口)
文章目录 1. 查询已运行的容器 2. 停止docker服务 3. 进入主机配置文件目录 4. 修改配置文件 5. 验证是否生效 1. 查询已运行的容器 2. 停止docker服务 systemctl ...
- Docker容器之间数据传输
Docker容器之间数据传输 1.从容器中将文件拷贝到宿主机上. 在宿主机你想要接收文件的地方,运行下面的指令 docker cp 容器id:home/test . docker run -d --n ...
- Docker——容器内部执行宿主机的docker命令
现在有一个需求是在容器内部使用docker命令,但试了一下报命令不存在 解决办法: 把docker相关的命令和依赖使用-v挂载到容器 docker@box:~$ docker run -it -d \ ...
- 6 实现多主机间 Docker 容器通信
目录 1 iptables简介 1.1 基本操作指令 1.2 iptables 工作流程 2 实现多主机间Docker容器通信 2.1 目标 2.2 操作步骤总结 2.3 具体操作步骤 1 iptab ...
- docker容器的网络配置,允许docker可以被宿主机以外的其它主机访问以及局域网内可以直接访问docker容器ip
自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求.容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信. 一.端口映射(局域网,外网 ...
- Docker 容器的网络连接
2019独角兽企业重金招聘Python工程师标准>>> 文章首发于公众号<程序员果果> 地址:https://mp.weixin.qq.com/s/DzF-ZwaY4Qt ...
- docker 容器共享数据_如何在Docker容器之间共享数据
docker 容器共享数据 介绍 (Introduction) Docker is a popular containerization tool used to provide software a ...
- Docker篇之docker容器之间的通信
自从Docker容器工具诞生以来,当我们在正式线上环境进行容器部署以及容器管理任务时,通常容器之间是需要进行数据通信的,来支撑正常业务运转.因此容器间的通信也随之成为热点,也是生产环境中的重中之重. ...
最新文章
- python比前端好学吗_前端学习到底难不难?
- [Unity3d]u3d中定时器的使用
- java throwable用法_java – ExceptionHandler不能与Throwable一起使用
- vue从入门到精通之进阶篇(三)axios
- python-运算符之算术运算符
- 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(2)
- es6 字符串的 Iterator 接口
- Android之知识总结
- Zabbix触发器配置指定生效星期监控CPU使用率
- 如何使用Wondershare DVD Creator将照片刻录到DVD中?
- 濮阳第二届创客机器人比赛_【比赛】许昌市第二届机器人大赛成功举办
- 基于elementui的年月日周时间控件
- 我国《个人信息保护法》立法背景与制度详解
- 支持Apple Music无损音频的耳机型号以及iPhone、iPad
- 给工具栏按钮添加图标和文字
- 两个实体不是同个类同名字段赋值问题
- JavaFX --- 标签、文本框、密码框、下拉框、按钮、单选按钮、复选框
- 第一节 模式识别的基本概念
- delete 后加 limit
- 散射介质成像中弹道光子、蛇形光子、散射光子的概念
热门文章
- 【学习日记】Dom基础
- Proteus,keil5仿真运行stm32程序,流水灯详细教程
- MathType的配置问题;将word中的公式转换为mathtype格式失败,缺少OMML2MML.XSL
- 蚂蚁金服CTO程立:创新发展数字时代金融关键技术
- Pycharm提示“typo:in word“的意思
- 百度网盘linux版本怎么安装
- Ubuntu20.04的一些功能设置记录(持续更新)
- shap 解释理赔时效模型特征
- ESP32控制器使用SX1278 LoRa模块的方法
- 基于Windows平台的Radius服务器搭建指南