vm-nat网络配置

虚拟机端口映射

在使用vm作为开发测试机的时候首先碰到的问题,就是部署在虚拟机里的服务,比如mysql,怎样在host主机访问呢?

首先整理下概念

  • Host:宿主机
  • Guest: 虚拟机

这里记录下我的NAT方法

打开VirtualBox中的这台虚拟机-->设置-->网络-->高级-->端口转发

vm-network1

vm-network2

每一行是一个端口映射,主机IP固定写0.0.0.0,子系统IP不用写。主机端口写映射到主机的端口,子系统端口写虚拟机要映射出来的端口。

比如要映射虚拟机的22端口到宿主机,这里由于宿主机的22端口被宿主机的sshd占用了,所以这里不能再用22端口映射,所以改成了28222

名称协议主机IP主机端口子系统IP子系统端口
Rule1TCP0.0.0.02822222

这样在宿主机上通过ssh tom@127.0.0.1 -p 28222 这条命令就连到虚拟机的ssh了。

以此类推,其他3306、6379等端口也可以从虚拟机映射到宿主机,如果宿主机已经占用了端口那么就改个未被占用的端口,自行记录对应关系。

docker容器端口映射

以此类推,如果在vm中起docker容器,首先要把容器的端口映射出来。

docker run -d --name mysql57 --restart always -p 3306:3306 mysql:5.7.32

比如这句mysql容器,首先把容器3306端口映射到容器的宿主机(vm),然后再把vm的3306映射到vm的宿主机。

这样通过两层网络转发,就可以在宿主机直接访问容器的3306数据库了。