解决docker-compose部署的Gogs服务挂了访问不了(报错:sshd[xx]: error: kex_exchange_identification: Connection closed)
背景:
公司项目统一放在私有部署的Gogs服务上,Gogs服务是一种用于统一版本管理的Git系统。它旨在提供一个易于安装和使用的Git服务,适用于个人用户、团队或小型组织。通过Gogs服务,用户可以创建、管理和共享Git存储库,以便进行代码版本控制和协作开发。
问题排查
Gogs服务突然挂了,web端突然登录不上了。
- 经尝试
docker-compose restart
或者先docker-compose stop
然后docker-compose up
重启容器多次(报错:sshd[xx]: error: kex_exchange_identification: Connection closed
),发现还是访问不了。 docker ps
查看容器状态发现Gogs容器状态显示unhealthy
。- 那就确定是Gogs容器内服务错误的问题了。查看数据卷挂载出来的Gogs启动日志或者进入容器查看Gogs启动日志
gogs.log
文件,发现显示(open database: dial tcp ipxxx
):connect: connection timed out
docker-compose.yml展示:
version: ‘2.3’
services:
mysql-gogs:image: mysql:5.7
restart: always
ports:
- "3307:3306"
environment:
- MYSQL_DATABASE=gogsDatabase
- MYSQL_ROOT_PASSWORD=yourDatabasePwd
command:
--lower_case_table_names=1
--character-set-server=utf8
--collation-server=utf8_general_ci
--explicit_defaults_for_timestamp=true
--sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d
gogs:
image: gogs/gogs:latest
restart: always
ports:
- "yourPort:22"
- "yourPort:3000"
volumes:
- ./gogs/data:/data
links:
- mysql-gogs
depends_on:
- mysql-gogs
原因分析:
经上述排查后问题已经定位到了,那就是数据库服务连接超时。
- 排查数据库服务,这里LZ是数据库是Mysql服务,发现服务是没问题,使用navicat是能连接上的。
- 那就定位到是数据库连接配置的问题了
- 检查配置文件
app.ini
的数据库连接参数,发现HOST
属性是172.30.0.1:3307
这种gateway虚拟IP和容器映射出来的端口
解决方案:
容器ID可以命令docker ps
查看
- 将配置文件中的
HOST
属性的值改为Mysql容器ID:3306
,3306是MySql容器内部的端口,而不是映射出来的端口 - 重启容器。
docker-compose restart
或者先docker-compose stop
然后docker-compose up
重启
还没有评论,来说两句吧...