Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

背景

我在windows电脑安装了一个VM,使用VM开启了Linux服务器,运行docker,下载服务镜像,然后运行服务,然后遇到了主机无法访问服务的问题。

问题排查

STEP1:首先要开启防火墙端口,这个我的Coolify系列其他文章有详细讲解,可以参考一下哇~~

STEP2:配置虚拟机网络,让主机以及局域网其他网络均可访问你的虚拟机(如何让局域网中的其他主机访问虚拟机)

设置网络

接下来详细介绍 配置虚拟机网络,让主机以及局域网其他网络均可访问你的虚拟机(如何让局域网中的其他主机访问虚拟机)

当前情况

  • 同一局域网主机1,主机2都为Windows系统,
  • 主机1上安装了VMware,并新增了一台虚拟机,使用CentOS 7系统。
  • 虚拟机的网络适配器设置为NAT模式

目标

  • 主机1可登录此虚拟机
  • 局域网其他主机也可以登录此虚拟机
  • 局域网所有机器都可以访问此虚拟机上面部署的服务
    Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

开始动工

检查虚拟机设置,确保为NAT模式

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

检查虚拟机所在的主机1的网络ip

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

进入虚拟机:虚拟网络编辑器中查看NAT设置中的网关IP

cd  /etc/sysconfig/network-scripts/     //进入到网络适配器文件夹中,找到你的网络配置文件 vi  ifcfg-eth0    //我的网络配置文件名是ifcfg-eth0,编辑文件 或者通过下面命令来进行搜索 ls | grep 'ifcfg-*' 

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

eth0与ens33的关系:目前的主流网卡为使用以太网络协定所开发出来的以太网卡 (Ethernet),因此我们 Linux 就称呼这种网络接口为 ethN (N 为数字)。 举例来说,主机上面有一张以太网卡,因此主机的网络接口就是 eth0 (第一张为 0 号开始)。新的 CentOS 7 开始对于网卡的编号有另一套规则,网卡的界面代号与网卡的来源有关,网卡名称会是这样分类的:

  • eno1 :代表由主板 BIOS 内置的网卡
  • ens1 :代表由主板 BIOS 内置的 PCI-E 界面的网卡
  • enp2s0 :代表 PCI-E 界面的独立网卡,可能有多个插孔,因此会有 s0, s1... 的编号~
  • eth0 :如果上述的名称都不适用,就回到原本的默认网卡编号

所以我们可以通过新建一个网卡文件来设定网络配置,重点是这两行

BOOTPROTO=dhcp ONBOOT=yes 

假如centos7里没有ifcfg-eth0只有 ifcfg-ens33(没有Eth0网卡)

参考命令:

cd  /etc/sysconfig/network-scripts/     //进入到网络适配器文件夹中 mv ifcfg-ethXXX ifcfg-eth0     //名字改为ifcfg-eth0 vi  ifcfg-eth0    //编辑文件  

那就新增一个,参考配置如下:

TYPE=Ethernet  DEFROUTE=yes  PEERDNS=yes  PEERROUTES=yes  IPV4_FAILURE_FATAL=no  IPV6INIT=yes  IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes  IPV6_PEERDNS=yes  IPV6_PEERROUTES=yes  IPV6_FAILURE_FATAL=no  NAME=eth0 BOOTPROTO=dhcp  ONBOOT=yes  DNS1=8.8.8.8 

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

保存,然后重启服务

service network restart  # 重启网络 ping www.baidu.com  # 测试网络  

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

查看IP地址

ip addr 

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

此时我们要做一些测试

  • 虚拟机1能ping通www.baidu.com(已达成)
  • 虚拟机所在的主机1能ping通虚拟机(已达成)
  • 虚拟机能ping通自己所在的主机(已达成)
  • 虚拟机所在的主机1能使用linux工具登录虚拟机(已达成)

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

安装一个nginx,部署一个网页进行测试

cd /var/opt/ wget http://nginx.org/download/nginx-1.22.1.tar.gz tar -zxvf nginx-1.22.1.tar.gz yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel cd nginx-1.22.1 ./configure make install # 打开配置文件,改为喜欢的端口号 vi /usr/local/nginx/conf/nginx.conf 启动nginx ./usr/local/nginx/sbin/nginx 查看nginx是否启动 ps -ef | grep nginx  

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

使用虚拟机所在的主机1访问虚拟机的网页,测试成功

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

接下来我们让2,3都可以链接虚拟机

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

设置VMVare的默认网关(相当于我们设置路由器):

编辑->虚拟网络编辑器->更改设置->选中VM8>点击NAT设置,设置默认网关(根据本地的ipconfig设置)

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

端口转发

选择“NAT设置”,按照下图进行端口转发的设置。将主机的空闲端口指定为8080(可以指定任意的空闲端口),虚拟机的空闲端口同样指定为8080。然后,在主机2上用主机1的IP+主机1的端口的方式来访问虚拟机1中的网页,如:192.168.0.128:8080。如果这样不能访问成功,请接着做下一步。

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

配置

回到虚拟机所在的主机1:控制面板所有控制面板项网络连接,设置主机ip地址,点击VMnet8,设置ip
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

最后一点哦,配置虚拟机所在主机的防火墙策略,我直接给它关了,这个不太好,建议小伙伴们去设置一下端口策略哦~~

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

测试访问

经过一系列配置以后,使用宿主机进行测试访问以下三个地址,我们发现

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

经过反复测试,确认是偶然性速度快慢问题,速度应该和局域网网络稳定性有关系

接下来我去搞docker

我们创建一个docker测试项目,进行测试

cd /var/opt/ ls mkdir docker-test-demo ls cd docker-test-demo/ touch Dockerfile vi Dockerfile  

写入以下内容

FROM node:9.2.1-alpine # Install base packages and set timezone ShangHai RUN apk update &&      apk add tzdata &&      /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone WORKDIR /app COPY ./app /app RUN npm install EXPOSE 8090 CMD [ "node", "server.js" ] 

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

补充.dockerignore

touch .dockerignore 

.dockerignore写入以下内容

node_modules npm-debug.log  

准备一个简单的nodejs文件

var http = require('http');  http.createServer(function (request, response) {       response.writeHead(200, { 'Content-Type': 'text/plain' });       response.end('Hello Worldn'); }).listen(8090);  console.log('Server running at http://127.0.0.1:8090/');  

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

将文件放到我们的dockerfile旁边app目录下

mkdir app cd app 

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

启动docker以及设置开机启动

systemctl start docker 接下来执行 chkconfig docker on 或者 systemctl enable docker.service 

下载构建镜像

下载镜像 docker search node docker pull docker.io/node:9.2.1-alpine 构建镜像,不要忘了後面還有一個點點哦 docker build -t node:v1 . 启动容器脚本 docker run -d -p 8090:8090 node:v1 

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

成功啦~~

在虚拟机使用 curl http://localhost:8090/ 在宿主机使用 http://192.168.33.128:8090/ 在其他局域网电脑使用 http://192.168.1.6:8090/ 

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务
Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

今天就写到这里啦~

  • 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境,合作共赢

Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

发表评论

相关文章