You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下Gogs连接MySQL容器被拒,本地Git仓库配置遇阻

解决Gogs容器无法连接MySQL容器的问题

嘿,作为Docker新手碰到这种跨容器连接被拒绝的问题太正常了,我帮你一步步捋清楚问题出在哪,怎么解决!

首先,最常见的问题就是容器网络不互通,或者Gogs配置里的数据库地址填错了,咱们逐个排查:

1. 确认容器在同一个自定义网络中

Docker默认的bridge网络有时候会有解析问题,最好给你的服务创建一个专属的自定义网络,确保所有容器(Gogs、MySQL、phpMyAdmin)都在这个网络里。

在你的docker-compose.yml里添加网络配置,示例如下:

# 在文件末尾添加自定义网络
networks:
  gogs-mysql-network:
    driver: bridge

然后给每个服务都加上networks字段,比如MySQL服务下:

services:
  mysql:
    # 其他配置...
    networks:
      - gogs-mysql-network

Gogs和phpMyAdmin也一样要加入这个网络,这样它们之间才能通过服务名称互相访问。

2. 检查MySQL的配置细节

  • 数据库主机地址别填localhost! 容器里的localhost指的是容器自己,不是MySQL容器。你要填的是docker-compose.yml里MySQL服务的名称(比如你给MySQL起的服务名是mysql,那就填mysql:3306)。
  • 提前创建好Gogs需要的数据库和用户:可以通过MySQL的环境变量自动创建,比如在MySQL服务里加:
    environment:
      MYSQL_ROOT_PASSWORD: your-root-pass
      MYSQL_DATABASE: gogs_db  # 自动创建Gogs要用的数据库
      MYSQL_USER: gogs         # 创建专门的Gogs用户
      MYSQL_PASSWORD: gogs-pass # 用户密码
    
    或者进入MySQL容器手动执行SQL授权:
    docker exec -it <mysql-container-name> mysql -uroot -p
    
    然后执行:
    CREATE USER 'gogs'@'%' IDENTIFIED BY 'gogs-pass';
    GRANT ALL PRIVILEGES ON gogs_db.* TO 'gogs'@'%';
    FLUSH PRIVILEGES;
    
  • 不要依赖宿主机的端口映射:容器之间通信用的是容器内部的3306端口,不是你映射到宿主机的端口(比如33060),Gogs配置里的数据库端口填3306就行。

3. Gogs安装页面的正确配置

在localhost:10080的安装页面里,数据库部分要这么填:

  • 数据库类型:选择MySQL
  • 数据库主机:mysql:3306(替换成你MySQL服务的名称)
  • 数据库名称:gogs_db(和你在MySQL里创建的一致)
  • 用户名:gogs(你创建的专属用户)
  • 密码:gogs-pass(对应用户的密码)

4. 测试容器间的连通性

如果还是不行,先测试Gogs容器能不能访问MySQL:

  • 进入Gogs容器:
    docker exec -it <gogs-container-name> /bin/bash
    
  • 用ping测试服务名称解析:
    ping mysql
    
    如果能ping通,说明网络没问题;如果不行,回去检查网络配置。
  • 用telnet测试端口是否开放:
    telnet mysql 3306
    
    如果能连接成功,说明MySQL的端口是正常开放的,问题大概率在Gogs的配置参数上。

参考完整的docker-compose.yml示例

给你一个可以直接参考的配置,确保所有服务都在同一个网络,参数配置正确:

version: '3'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: gogs_db
      MYSQL_USER: gogs
      MYSQL_PASSWORD: gogs123
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - gogs-mysql-network

  gogs:
    image: gogs/gogs
    ports:
      - "10080:3000"
      - "10022:22"
    volumes:
      - gogs-data:/data
    networks:
      - gogs-mysql-network
    depends_on:
      - mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8080:80"
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
    networks:
      - gogs-mysql-network
    depends_on:
      - mysql

networks:
  gogs-mysql-network:

volumes:
  mysql-data:
  gogs-data:

按照这个配置重新部署,应该就能解决连接被拒绝的问题啦!

内容的提问来源于stack exchange,提问作者Kostyuk Rostyslav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:28:09