1、.env 的文件,不会自动加载,要写入环境变量。
vim ~/.bashrc
末尾加上,加载 .env 文件中的环境变量
vim ~/.bashrc
# 末尾加上,加载 .env 文件中的环境变量
if [ -f /home/bewtr/.env ]; then
export $(cat /home/bewtr/.env | xargs)
fi
#重启生效
source ~/.bashrc
2、网络通讯的问题。
正常是 serviceA、serviceB注册到 nacos,gate-way 再从 nacos 获取服务轮询访问。
但遇到 service A 注册到nacos的服务IP不能访问,验证时进入 gate-way容器内去尝试访问,ip Ping的通,但端口没有开放。
通过 docker inspect net 查看网络,serviceA显示的ip,这个在 gate-way中是可以使用的。
解决方案:
注册指定的发现,设定指定网卡:
注册指定的发现,设定指定网卡:
SPRING_CLOUD_NACOS_DISCOVERY_NETWORK_INTERFACE: eth0
这个可以获取到和 docker inspect的一样的IP。
2、使用docker-swarm的服务名,比如 admin-system
指定注册IP名称为这个,这样swarm内部DNS会自动解析。
3、更新服务方式
docker service update bewtr_admin-system --force
重要的是:--force,强制更新。
4、镜像不会自动拉取,需要提前手动更新。
docker pull 的方式
5、资源类
由于docker stack rm bewtr 删除的方式,会一起都删除。
像redis emqx 类型,部署完成不会动的情况下,就很容易被误操作,而且emqx中的有的删除重启会都是部分的配置,所以建议独立部署。
service 服务类型的使用 swarm集群的管理
6、部署服务健康检查
示例,health 注意保证服务启动完整,否则这里就会服务一直重启,可以考虑把这个时间拉长。
7、部署服务的更新配置
关注底下的参数,
stop_grace_period 是为了服务,停止了,还能正常处理 gate-way或是其他集群由于缓存,依旧路由过来的信息。一般gate-way获取nacos的心跳是 5 s。
parallelism 设置每次更新 1 个服务,保证期间有正常可用的服务
delay 设置是为了服务保证真的启动了,这个时间依赖服务启动时间
其他的参数参考即可。
stop_grace_period: 100s
deploy:
replicas: 2 # 部署 1 个副本
update_config:
parallelism: 1 # 每次更新 1 个副本
delay: 100s # 每次更新间隔 100 秒
order: start-first # 先启动新容器,再停止旧容器
failure_action: rollback
rollback_config:
parallelism: 1 # 回滚时每次处理 1 个副本
delay: 100s # 回滚时每次间隔 10 秒
order: stop-first # 回滚时先停止新容器,再启动旧容器