MacOS下解决宿主机和docker容器之间网络互通
docker在Mac下使用非常方便,官网提供了desktop版本的可视化软件,甚至还十分贴心地集成好了k8s套件。然而如果想同时部署和使用多个容器,每个容器不使用127.0.0.1地址,而是各自有ip,如使用172.17.0.x网段,则需要解决从宿主机到各个容器的网络通信。
如果是使用其他Linux系统的用户则不用担心这个问题,Linxu系统会自动帮我们处理好ip之间的互通(宿主机和各个容器之间)。而Mac想要直接访问容器的ip,则需要曲线救国,通过搭建一个vpn服务,然后通过vpn再去和容器的网段互联。
经过尝试openvpn成为了最佳的解决方案,github的项目地址为: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,运行它,然后再到终端执行如下命令来添加网络配置:
open ~/Downloads/DockerForMac.ovpn
如此这番操作,就可以直接通过宿主机去访问docker容器实例的ip了,使用ping命令也能ping通。
MacOS下解决宿主机和docker容器之间网络互通的更多相关文章
- 如何使用数据卷在宿主机和docker容器之间共享文件
共享宿主机的目录给容器 docker run -i -t -v ~/download:/home/hello python3-env /bin/bash -v 表示创建一个数据卷并挂载到容器里 ~/ ...
- windows宿主机和docker容器设置挂载共享文件夹
docker容器内的程序经常需要访问.调用宿主机目录中的数据,每次都要导入导出非常麻烦费力. 接下来,一步步实现将宿主机的指定文件夹挂载到docker容器中. 1. 打开Oracle VM Vitua ...
- docker 容器的网络
容器的网络模式 bridge -net=bridge 默认网络.docker启动后创建一个docker0网桥,默认创建的容器也添加到这个网桥 [root@localhost ~]# ip a 1: l ...
- Jenkins(Docker容器内)使用宿主机的docker命令
1.Jenkins镜像 Docker容器内的Jenkins使用容器外宿主机的Docker(即DooD,还有另外的情况就是DioD),google一下有几种说法,但是都没试成功(试过一种就是修改宿主机/ ...
- 不同主机的docker容器互相通信
Docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.0.1/16,一个16位的子网掩码给容器提供了 65534个IP地址. docker0只是一个在绑定到 ...
- Docker基本命令与使用 —— Docker容器的网络连接(四)
一.Docker容器的网络基础 通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务. docker0是Linux虚拟 ...
- 如何在Docker容器之间拷贝数据
[编者的话]在容器之间拷贝数据是Docker一个重要而且基本的功能.拷贝数据到其他容器是一个经常使用到的场景,如当服务器遇到不可预见的“灾难”(注:断电,宕机)时,起到备份数据的作用.本文作者详细介绍 ...
- Docker容器的网络连接:
yw1989@ubuntu:~$ ifconfig docker0 Link encap:Ethernet HWaddr 02:42:97:61:42:9f inet addr:172.17.0.1 ...
- Docker容器的网络连接
Docker容器的网络连接 Docker容器的网络连接 我们用ifconfig命令来查看网络设备 我们可以看到上面有个叫docker0的网络设备,docker守护进程就是通过docker0为docke ...
随机推荐
- Java基础教程——多线程:创建线程
多线程 进程 每一个应用程序在运行时,都会产生至少一个进程(process). 进程是操作系统进行"资源分配和调度"的独立单位. Windows系统的"任务管理器&quo ...
- Ajax原理与图解
Ajax原理 Ajax 的全称是Asynchronous JavaScript and XML. Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后 ...
- 一次SQL注入导致的"越权"
原文来自SecIN社区-作者:tkswifty 相关背景 在实际的业务开发中,SQL交互往往是业务系统中不可或缺的一项.在Java中提供了类似Mybatis.Hibernate.SpringDat ...
- FPGA PS2协议
VerilogHDL那些事儿_建模篇(黑金FPGA开发板配套教程) 作者:akuei2 说明:参照该书将部分程序验证学习一遍 学习时间:2014年5月3号 主要收获: 1. 对PS2接口有初步了解: ...
- 色相偏移 HueShift ASE
色相偏移可以改变颜色色调,unity ASE没有参考UE4写个,原理很简单,将颜色向量绕(1,1,1)旋转,就可以得到不同色调的颜色. https://zhuanlan.zhihu.com/p/677 ...
- JZOJ2020年8月11日提高组T2 宝石
JZOJ2020年8月11日提高组T2 宝石 题目 Description 见上帝动了恻隐之心,天后也想显示一下慈悲之怀,随即从口袋中取出一块魔术方巾,让身边的美神维纳斯拿到后堂的屏风上去试试,屏风是 ...
- 在 Spring Boot 中使用 Flyway
一.Flyway 介绍 Flyway 是一个开源的数据库迁移工具,MySQL, SQL Server, Oracle 等二十多种数据库 在 Flyway 中数据库的所有改变均称为迁移(migratio ...
- 第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer
一. 概述 re模块的函数search.match.fullmatch.findall.finditer都是用于搜索文本中是否包含指定模式的串,函数的参数都是一样的,第一个参数是模式串.第二个是搜索文 ...
- PyQt学习随笔:ListView控件增加列表项
ListView控件如果需要增加列表项,就是在对应数据存储中插入项,这又分两种情况,一种是已知列表数据存储,一种是未知数据存储.如果是未知数据存储,可以通过: ListView控件名.model() ...
- Docker下Python Flask+Redis+MySQL+RQ队列简单配置
本篇博文主要讲解Docker下使用RQ队列的通信配置,主要是网上的部分文章写的不太清楚,特写一篇 作者使用docker-compose.yml文件调度各部分文件Dockerfile,起初是这样写的 v ...