3

情景复现

打开cd系统,显示未知错误,打开控制台报错信息如下:
image.png

该错误暴露出两个错误:

  1. cd 系统不应该走mock 环境 (拦截器配置的)
  2. 后台服务没有起来

远程操控服务器,查看为什么后台服务器没有起来。
ssh 连接登录上服务器 (连上了VPN 我的计算机和目标服务器是同一局域网下,所以未指定端口号)

ssh 用户名@目标服务器ip地址
ssh wu@192.168.1.1

解决问题

尝试启动后台容器

docker ps -a 发现后台的容器没有启动的。状态是Exited
image.png

docker start 容器名
docker ps -a

启动容器,再次查看是否启动,发现状态还是Exited, 未正常启动,下一步查看日志为什么容器未能正常启动。

docker logs 容器名

image.png
连接192.169.1.100这台机器的8080端口服务超时。
错误的思路:

需要登录192.168.1.100 查看8080 端口的服务是否开着服务。

老师指导后的思路:

查看192.168.1.100 的具体配置项

疑惑:我想的是进入容器查看容器的配置,但容器是未启动的,进不去,应该去哪里查看配置。一头雾水

CD系统的配置在.gitlab-ci.yml文件

cd配置,在deploy 部署中,大概干了如下的几个操作:
image.png
其中api容器就是 后台服务容器。创建容器的代码如下:

docker create --cpus=2 --memory=4G --name=${PROJECT_NAME}-api \
        --network=${PROJECT_NAME}-network \
        --workdir=/opt/app \
        -v /home/app/${PROJECT_NAME}:/opt/app \
        adoptopenjdk/openjdk8:jre8u282-b08-debian \
        java -jar app.jar \
        --spring.config.location=/opt/app/

每个容器就是一个小的操作系统

cpus: 设置cpu数量
memory: 设置内存大小
network: 设置容器连接的网络名称
-v: 将宿主机的内容挂载到容器中 宿主机地址/home/app/${PROJECT_NAME}, 容器中的地址:/opt/app。
java -jar app.jar --spring.config.location=/opt/app/ 容器启动spring-boot的命令,--spring.config.location=/opt/app/ 该配置设置了启动的配置文件在/opt/app 中。

spring-boot的启动文件一般是application.yml 或者是application.properties
宿主机:/home/app/${PROJECT_NAME}/c下有启动文件。
查看application.yml 启动文件:
image.png
并未发现192.168.1.100 对应的配置项。

嗯嗯嗯....又不知道怎么办了。

重新查看docker日志

可能是docker看的日志不对了,需要清空docker 容器的日志,然后在重启docker

docker ps -aq | xargs docker inspect --format='{{.LogPath}}'
docker inspect --format='{{.LogPath}}' 容器id
docker start 容器名
docker logs 容器名

依次执行上述命令。在日志中看见了问题:
image.png
flyway的错误。

1 在flyway_schema_history表中删除一条1.8__xxxxx的修改。
2 看1.8__xxxxx中修改了数据表的什么,去撤回修改。
执行上述两个操作应该就能解决问题。

由于害怕不小心操作错误, 所以先本地修复,在去服务器上修复。
先在服务器备份一份当前的数据。

tar czf /home/app/${PROJECT_NAME}/backups/dbbackup-2024-09-25-15-23.tar.gz /home/app/${PROJECT_NAME}/db

在本地拉数据。

sudo scp -r yunzhi@192.168.xx.xx:/home/app/tute-lab-schedule/backups/dbbackup-2024-09-25-15-23.tar.gz /Users/wu/Documents/sqldocument

image.png

image.png
解压后,就得到了当前CD 系统上的数据。
image.png
恢复数据。又又卡了。
image.png

image.png

最后的思路:

1 先要解决上面恢复数据的bug
2 进入容器
3 在flyway_schema_history表中删除一条1.8__xxxxx的修改。
4 看1.8__xxxxx中修改了数据表的什么,去撤回修改。
5 将这些命令去服务器端在执行一遍,应该就解决了。

补充 docker容器间的通信

image.png
image.png

最后

docker每个容器就是一个小的操作系统。要分清是在宿主机中还是在docker 容器中执行对应的命令。希望这篇文章能对您有所帮助!


吴季分
390 声望13 粉丝