背景

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

问题排查

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

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

设置网络

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

当前情况

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

目标

  • 主机1可登录此虚拟机
  • 局域网其他主机也可以登录此虚拟机
  • 局域网所有机器都可以访问此虚拟机上面部署的服务

开始动工

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

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

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

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

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

保存,然后重启服务

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



查看IP地址

ip addr

此时我们要做一些测试

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





安装一个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









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

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

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

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



端口转发

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



配置

回到虚拟机所在的主机1:控制面板\所有控制面板项\网络连接,设置主机ip地址,点击VMnet8,设置ip





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

测试访问

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



接下来我去搞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" ]

补充.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 World\n');
}).listen(8090); console.log('Server running at http://127.0.0.1:8090/');

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

mkdir app
cd app

启动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





成功啦~~

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



今天就写到这里啦~

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

欢迎大家指出文章需要改正之处~

学无止境,合作共赢

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

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

  1. 【Azure微服务 Service Fabric 】Service Fabric中应用开启外部访问端口及微服务之间通过反向代理端口访问问题

    问题描述 1) 当成功的在Service Fabric集群中部署了应用后,如何来访问呢?如果是一个Web服务,它的URL又是什么呢? 2) 当Service Fabric集群中,服务之间如需要相互访问 ...

  2. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...

  3. 主机访问虚拟机中linux上的web服务

    环境:主机windows xp 虚拟机centos 6.4 [root@localhost /]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT[root ...

  4. 关于主机不能访问虚拟机的web服务解决

    centos7默认并没有开启80端口,我们只有开启就行 [root@localhost sysconfig]# firewall-cmd --permanent --add-port=3032/tcp ...

  5. CentOS6.5(4)----宿主机无法访问虚拟机中的web服务解决方案

    宿主机无法访问虚拟机中的web服务 在Windows7宿主机中的VMware虚拟机中安装了CentOS6.5操作系统,并且基于Nginx搭建了Web服务器,网页刚刚搭建好的时候,通过宿主机的浏览器可以 ...

  6. SpringBoot学习笔记(11)-----SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用

    1. activemq 首先引入依赖 pom.xml文件 <dependency> <groupId>org.springframework.boot</groupId& ...

  7. SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用

    1. activemq 首先引入依赖 pom.xml文件 <dependency> <groupId>org.springframework.boot</groupId& ...

  8. AD中如何解决 同一局域网下证书冲突问题

    AD中如何解决  同一局域网下证书冲突问题 https://wenku.baidu.com/view/c20e1720482fb4daa58d4b52.html

  9. 如何解决局域网中Windows防火墙不能访问Oracle问题!

    在防火墙例外中,添加端口1521端口就样局域网内的其他机器就可以访问你的ORACLE了. 在防火墙的入站规则中,新建端口规则.过程如下例图片所示:

  10. 解决:Tomcat 局域网IP地址 访问不了

    解决:Tomcat 局域网IP地址 访问不了 2014年10月17日 ⁄ 综合 ⁄ 共 1000字 ⁄ 字号 小 中 大 ⁄ 评论关闭 如果连最基本的localhost:8080都失败的话. 原因就一 ...

随机推荐

  1. python如何引入外部其他py文件

    新手常常会遇到这种问题 解决方法如下: 比如我在C:\Users\123\Desktop有一个mmm.py文件,内容为: def abc(): print('hello,world') 当我写程序想引 ...

  2. 如何通过 C#/VB.NET 重命名 Excel 表格并设置选项卡颜色

    在 Excel 文件中创建多个工作表可以使数据更加井然有序.例如,可以为不同的区域.不同的月份/年份或不同的项目等创建不同的工作表.但要区分多个工作表,则需要更改它们的名称.同时,设置不同的选项卡颜色 ...

  3. Pyhton基础部分:6、与用户交互、基础运算符

    目录 一.python数据类型 1.布尔值bool 2.元组tuple 3.集合set 二.与用户交互 1.获取用户输入 2.输出内部信息 3.语言环境差异 三.格式化输入 1.代码实现 2.注意事项 ...

  4. 2022,一个Java程序猿的外设配置

    工欲善其事,必先利其器. 是的没错,我就是个器材党,哈哈.正赶上搬家布置了新桌面,经过我的精心挑选和安装,也是凑齐了我新一套的桌面外设.写下来记录一下. 键盘 套件:腹灵MK870 轴体:佳达隆G白P ...

  5. 系统整理K8S的配置管理实战-建议收藏系列

    目录 一.ConfigMap 1.1.创建 1.1.1.from-file 1.1.2.from-env-file 1.1.3.from-literal 1.1.4.基于yaml文件创建 1.2.Po ...

  6. Day04:Java数据类型

    Java的数据类型 强类型语言 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 弱类型语言 什么是变量 变量:可以变化的量. 在Java中每个变量都必须先申明这个变量是什么类型 Stri ...

  7. C#怎么在生成解决方案的过程中执行perl脚本(C#早期绑定)

    转载 怎么在生成解决方案的过程中执行perl脚本 早期绑定在编译期间识别并检查方法.属性.函数,并在应用程序执行之前执行其他优化.在这个绑定中,编译器已经知道它是什么类型的对象以及它拥有的方法或属性. ...

  8. ftp多用户多目录配置

    测试环境:centos7 1. 装包与卸载 yum -y install vsftpd yum -y autoremove vsftpd&&rm -rf /etc/vsftpd /et ...

  9. 【云原生 · Kubernetes】Kubernetes Node的隔离与恢复

    个人名片: 因为云计算成为了监控工程师‍ 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying Kubernetes Node的隔离与恢复 在硬件升级.硬件维护等情况下,我们需要将某些No ...

  10. float16与float32转换

    // based on https://gist.github.com/martin-kallman/5049614 // float32 // Martin Kallman // // Fast h ...