背景:
将springcloud项目的jar分发到不同机器并根据dockerfile创建docker镜像,运行各个服务。
参考:jenkins+maven+docker+gitlab私服,自动化部署springcloud(内置脚本):https://blog.csdn.net/weixin_41546244/article/details/109889877
问题:
为了服务稳定每个服务分发不同服务器部署两个java进程,启动过程中,服务始终无法注册到注册中心,**根因:**因为不同的机器起着同一个服务,然后docker的默认ip一样,导致始终只有一个注册到,另外的注册不到,达不到预期效果。
思路:
每台服务器run时候分配固定ip,但是始终还是按broker0分配默认的。(思路错了)
知识扩展:
-------docker的网络模式(这里只简单的介绍两种,一共四种自行百度):
Bridge模式
当Docker进程启动时,默认会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。
bridge模式是docker的默认网络模式,不写–net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。
Host模式
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
注:这里我采用的是Bridge模式。
步骤如下:
1.vim /etc/docker/daemon.json
(设置网段)
添加"bip":“88.55.0.1/24”(自定义)
2.systemctl restart docker.service
(重启docker)
3.route -n
(查看是否加入)
4.firewall-cmd --permanent --zone=trusted --change-interface=docker0
(配置 docker 容器内允许访问外部网络)
5.firewall-cmd --reload
(重启防火墙)
注: 具体每一台机器分配的网段自行配置。
转载注明出处,谢谢。