解决docker-compose部署的Gogs服务挂了访问不了(报错:sshd[xx]: error: kex_exchange_identification: Connection closed)

深藏阁楼爱情的钟 2024-02-20 11:03 25阅读 0赞

背景:

公司项目统一放在私有部署的Gogs服务上,Gogs服务是一种用于统一版本管理的Git系统。它旨在提供一个易于安装和使用的Git服务,适用于个人用户、团队或小型组织。通过Gogs服务,用户可以创建、管理和共享Git存储库,以便进行代码版本控制和协作开发。


问题排查

Gogs服务突然挂了,web端突然登录不上了。

  1. 经尝试docker-compose restart或者先docker-compose stop然后docker-compose up重启容器多次(报错:sshd[xx]: error: kex_exchange_identification: Connection closed),发现还是访问不了。
  2. docker ps查看容器状态发现Gogs容器状态显示unhealthy
  3. 那就确定是Gogs容器内服务错误的问题了。查看数据卷挂载出来的Gogs启动日志或者进入容器查看Gogs启动日志gogs.log文件,发现显示(open database: dial tcp ipxxx:portxx: connect: connection timed out):
    在这里插入图片描述
  4. docker-compose.yml展示:

    version: ‘2.3’
    services:
    mysql-gogs:

    1. image: mysql:5.7
    2. restart: always
    3. ports:
    4. - "3307:3306"
    5. environment:
    6. - MYSQL_DATABASE=gogsDatabase
    7. - MYSQL_ROOT_PASSWORD=yourDatabasePwd
    8. command:
    9. --lower_case_table_names=1
    10. --character-set-server=utf8
    11. --collation-server=utf8_general_ci
    12. --explicit_defaults_for_timestamp=true
    13. --sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
    14. volumes:
    15. - ./mysql/data:/var/lib/mysql
    16. - ./mysql/conf:/etc/mysql/conf.d

    gogs:

    1. image: gogs/gogs:latest
    2. restart: always
    3. ports:
    4. - "yourPort:22"
    5. - "yourPort:3000"
    6. volumes:
    7. - ./gogs/data:/data
    8. links:
    9. - mysql-gogs
    10. depends_on:
    11. - mysql-gogs

原因分析:

经上述排查后问题已经定位到了,那就是数据库服务连接超时。

  1. 排查数据库服务,这里LZ是数据库是Mysql服务,发现服务是没问题,使用navicat是能连接上的。
  2. 那就定位到是数据库连接配置的问题了
  3. 检查配置文件app.ini的数据库连接参数,发现HOST属性是172.30.0.1:3307这种gateway虚拟IP和容器映射出来的端口
    在这里插入图片描述

解决方案:

容器ID可以命令docker ps查看

  1. 将配置文件中的HOST属性的值改为Mysql容器ID:3306,3306是MySql容器内部的端口,而不是映射出来的端口
  2. 重启容器。docker-compose restart或者先docker-compose stop然后docker-compose up重启

发表评论

表情:
评论列表 (有 0 条评论,25人围观)

还没有评论,来说两句吧...

相关阅读

    相关 懂优雅停机,搞线上服务

    公司项目是用 consul 进行注册的,在发布微服务的时候,总是会导致调用方出现一定几率的调用失败。一开始百思不得其解,后来咨询了资深的同事才知道:原来是服务下线的时候没有优雅