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容器之间网络互通相关推荐

  1. 宿主机和docker容器之间的文件拷贝

    1.从容器里面拷文件到宿主机 在宿主机里面执行以下命令: docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 示例: 假设容器名为nginx,要从容器里面拷贝的文件路为 ...

  2. 容器安装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 ...

  3. 6. 修改docker端口 (映射宿主机和docker容器中的端口)

    文章目录 1. 查询已运行的容器 2. 停止docker服务 3. 进入主机配置文件目录 4. 修改配置文件 5. 验证是否生效 1. 查询已运行的容器 2. 停止docker服务 systemctl ...

  4. Docker容器之间数据传输

    Docker容器之间数据传输 1.从容器中将文件拷贝到宿主机上. 在宿主机你想要接收文件的地方,运行下面的指令 docker cp 容器id:home/test . docker run -d --n ...

  5. Docker——容器内部执行宿主机的docker命令

    现在有一个需求是在容器内部使用docker命令,但试了一下报命令不存在 解决办法: 把docker相关的命令和依赖使用-v挂载到容器 docker@box:~$ docker run -it -d \ ...

  6. 6 实现多主机间 Docker 容器通信

    目录 1 iptables简介 1.1 基本操作指令 1.2 iptables 工作流程 2 实现多主机间Docker容器通信 2.1 目标 2.2 操作步骤总结 2.3 具体操作步骤 1 iptab ...

  7. docker容器的网络配置,允许docker可以被宿主机以外的其它主机访问以及局域网内可以直接访问docker容器ip

    自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求.容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信. 一.端口映射(局域网,外网 ...

  8. Docker 容器的网络连接

    2019独角兽企业重金招聘Python工程师标准>>> 文章首发于公众号<程序员果果> 地址:https://mp.weixin.qq.com/s/DzF-ZwaY4Qt ...

  9. docker 容器共享数据_如何在Docker容器之间共享数据

    docker 容器共享数据 介绍 (Introduction) Docker is a popular containerization tool used to provide software a ...

  10. Docker篇之docker容器之间的通信

    自从Docker容器工具诞生以来,当我们在正式线上环境进行容器部署以及容器管理任务时,通常容器之间是需要进行数据通信的,来支撑正常业务运转.因此容器间的通信也随之成为热点,也是生产环境中的重中之重. ...

最新文章

  1. python比前端好学吗_前端学习到底难不难?
  2. [Unity3d]u3d中定时器的使用
  3. java throwable用法_java – ExceptionHandler不能与Throwable一起使用
  4. vue从入门到精通之进阶篇(三)axios
  5. python-运算符之算术运算符
  6. 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(2)
  7. es6 字符串的 Iterator 接口
  8. Android之知识总结
  9. Zabbix触发器配置指定生效星期监控CPU使用率
  10. 如何使用Wondershare DVD Creator将照片刻录到DVD中?
  11. 濮阳第二届创客机器人比赛_【比赛】许昌市第二届机器人大赛成功举办
  12. 基于elementui的年月日周时间控件
  13. 我国《个人信息保护法》立法背景与制度详解
  14. 支持Apple Music无损音频的耳机型号以及iPhone、iPad
  15. 给工具栏按钮添加图标和文字
  16. 两个实体不是同个类同名字段赋值问题
  17. JavaFX --- 标签、文本框、密码框、下拉框、按钮、单选按钮、复选框
  18. 第一节 模式识别的基本概念
  19. delete 后加 limit
  20. 散射介质成像中弹道光子、蛇形光子、散射光子的概念

热门文章

  1. 【学习日记】Dom基础
  2. Proteus,keil5仿真运行stm32程序,流水灯详细教程
  3. MathType的配置问题;将word中的公式转换为mathtype格式失败,缺少OMML2MML.XSL
  4. 蚂蚁金服CTO程立:创新发展数字时代金融关键技术
  5. Pycharm提示“typo:in word“的意思
  6. 百度网盘linux版本怎么安装
  7. Ubuntu20.04的一些功能设置记录(持续更新)
  8. shap 解释理赔时效模型特征
  9. ESP32控制器使用SX1278 LoRa模块的方法
  10. 基于Windows平台的Radius服务器搭建指南