有个项目是公司那边做的,我们这边需要部署一下。具体是用docker swarm部署在虚拟机的centos7上的,部署完没有发现啥问题,然后打了个镜像。但是过了几天发现一些问题:
1. 恢复镜像后,启动系统显示登录已过期
原因: 每次快照恢复后虚拟机里的时间是打快照时的时间,没有更新。
解决方法: 公司那边提供的方法时开启vmware tools的自动更新时间功能。
但是虚拟机没有安装vmware tools,搞了一会子没装好,所以进行了手动更新:
# 1、清理本地yum缓存
yum clean all
# 2、查看软件包列表
yum list
# 3、安装ntp包
yum install ntp
# 4、更新时间
ntpdate cn.pool.ntp.org
2. 远程连接虚拟机一段时间后就会自动断开,然后无法连接
这个问题猜测是因为我默认配置虚拟机使用DHCP,网络出现了变化??总而言之,我将其配置为静态IP后解决。
-
centos7的网卡配置文件在
/etc/sysconfig/network-scripts/
目录下
查看网卡名称:
-
编辑对应的配置文件:
# 我这里是ens33
vi ifcfg-ens33
- 添加静态IP配置:
注释掉BOOTPROTO=dhcp
添加以下内容:
BOOTPROTO=static
IPADDR=192.168.31.128
NETMASK=255.255.255.0
GATEWAY=192.168.31.2
DNS1=8.8.8.8
这里的网关可以在虚拟机的虚拟网络编辑器中看到,这里不详细说了。注意和主机的网关是不一样的。
详细配置说明:
4. 修改/etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
GATEWAY=192.168.31.2
- 重启网络服务
service network restart
- 测试网络
ping www.baidu.com
3. 使用静态IP后无法访问虚拟机的web服务
这个问题折腾了我好久,主要表现如下:
-
8080端口正常使用:
-
防火墙也开放了这个端口:
-
虚拟机里可以ping的通外网,电脑也ping的通虚拟机
-
在虚拟机内部可以通过
curl +ip:8080
访问到8080端口
试了很多方法没有效果,然后突然想起来我再启动一个简单的容器试试能不能访问到,就pull了一个tomcat启动了个容器,结果容器启动不起来报类似这样的错误:
ocker: Error response from daemon: driver failed programming external connectivity on endpoint loving_bassi (37b4c399f676cf46e35fd26b2298ad81aac87739d8aee416f449e36c6cb22503): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 90 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
对于这个错误,我使用以下方法解决了:
pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
service docker restart
重启docker之后之前的容器全部挂掉了,我把所有容器启动,服务正常访问!!!