解决虚拟机挂起后再恢复后Docker部署的应用无法连接问题,


目录
  • 使用netstat -ntlp命令查看端口状态
  • 修改配置文件
  • 重启网络服务
  • 验证效果
    • 如果还不能访问怎么办?
  • 总结

    使用netstat -ntlp命令查看端口状态

    可以看到监听的是tcp的ipv6的端口,所以需要配置ipv4

    [root@zjj101 2m-2s-async]# netstat -ntlp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1224/mysqld
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      942/sshd
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1106/master
    tcp6       0      0 :::9876                 :::*                    LISTEN      78614/java
    tcp6       0      0 :::22                   :::*                    LISTEN      942/sshd
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1106/master

    修改配置文件

    root@zjj101 2m-2s-async]# vi /usr/lib/sysctl.d//00-system.conf

    00-system.conf 文件添加内容: net.ipv4.ip_forward = 1 ,然后 esc !wq 保存

    说明:

    net.ipv4.ip_forward 等于0表示不开启,为1表示开启。

    00-system.conf 文件内容:

    # Kernel sysctl configuration file
    #
    # For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
    # sysctl.conf(5) for more details.
    
    # Disable netfilter on bridges.
    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0
    # 启用ip转发功能
    net.ipv4.ip_forward = 1
    
    

    重启网络服务

    命令: systemctl restart network

    # 重启服务
    [root@zjj101 2m-2s-async]# systemctl restart network
    # 查看配置是否生效,如果返回为“net.ipv4.ip_forward = 1”则表示成功
    [root@zjj101 2m-2s-async]# sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 1
    
    

    验证效果

    此时访问一下,我这边发现可以访问了,即使 虚拟机再次挂起,再恢复,也能访问了

    如果还不能访问怎么办?

    重启Docker里面的container

    # 查看docker container ,发现两个都是Exited  状态,这不正常,下面开始重启
    [root@zjj101 2m-2s-async]# docker ps -a
    CONTAINER ID   IMAGE                           COMMAND                  CREATED      STATUS                       PORTS     NAMES
    8910b880038a   styletang/rocketmq-console-ng   "sh -c 'java $JAVA_O…"   2 days ago   Exited (137) 2 minutes ago             gifted_johnson
    e827d21c2efe   uifd/ui-for-docker              "/ui-for-docker"         2 days ago   Exited (2) 2 minutes ago               docker-web
    # 重启docker CONTAINER ID 为 8910b880038a 的 CONTAINER 
    [root@zjj101 2m-2s-async]# docker restart 8910b880038a
    8910b880038a
    # 重启docker CONTAINER ID 为 e827d21c2efe的 CONTAINER
    [root@zjj101 2m-2s-async]# docker restart e827d21c2efe
    e827d21c2efe
    
    

    上面步骤做完了,不出意外基本就可以访问了。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持PHP之友。

    您可能感兴趣的文章:
    • 如何在IDE部署springboot项目(有swagger和无swagger都是一样的)到服务器或者虚拟机上的docker
    • 一台虚拟机基于docker搭建大数据HDP集群的思路详解
    • docker镜像与传统vm虚拟机区别及分析
    • Docker安装阿里云服务器和在虚拟机安装遇到的坑(问题小结)
    • mysql安装navicat之后,出现2059,Authentication plugin及本地链接虚拟机docker,远程链接服务器
    • CentOS7虚拟机安装并配置docker套件

    相关内容