我想使用gogs搭建私有git仓库,数据库使用mysql:8.4.5,我想使用docker comp...
創建於:2025年7月13日
創建於:2025年7月13日
我想使用gogs搭建私有git仓库,数据库使用mysql:8.4.5,我想使用docker compose 创建,如果可以,请使用我本地电脑的以太网适配器 vEthernet (Default Switch)的IP:172.27.96.1,
当然可以!下面我会为你详细写一个基于 Docker Compose 的 Gogs + MySQL 搭建配置,并绑定到你的以太网适配器 vEthernet (Default Switch)
的IP:172.27.96.1
。你可以直接复制这个 docker-compose.yml
文件并做适当修改。
docker-compose.yml
文件yamlversion: '3.8' services: mysql: image: mysql:8.4.5 restart: always environment: MYSQL_ROOT_PASSWORD: gogsroot MYSQL_DATABASE: gogs MYSQL_USER: gogs MYSQL_PASSWORD: gogs123 command: --default-authentication-plugin=mysql_native_password volumes: - ./mysql-data:/var/lib/mysql networks: gogsnet: ipv4_address: 172.27.96.10 gogs: image: gogs/gogs:latest depends_on: - mysql restart: always environment: - GOGS_CUSTOM=/data/gogs volumes: - ./gogs-data:/data ports: - "172.27.96.1:3000:3000" # Web端口 - "172.27.96.1:10022:22" # SSH端口 networks: gogsnet: ipv4_address: 172.27.96.20 networks: gogsnet: driver: bridge ipam: config: - subnet: 172.27.96.0/24
172.27.96.1
网段兼容,避免IP冲突。172.27.96.10
172.27.96.20
http://172.27.96.1:3000
172.27.96.1:10022
mysql-data
和 gogs-data
两个数据卷。在 docker-compose.yml
文件所在目录执行:
bashdocker compose up -d
浏览器访问:http://172.27.96.1:3000
数据库类型选择 MySQL,连接信息如下:
text主机: mysql:3306 用户名: gogs 密码: gogs123 数据库: gogs
其他保持默认即可。
"0.0.0.0:3000:3000"
试下(会暴露到所有网卡)。如果你有任何报错或者需要配置 LDAP、SSL、域名等,可以告诉我!
cannot start a mysql docker ,it says:
2025-07-13T04:59:45.177257Z 0 [ERROR] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-001146 - Table 'mysql.component' doesn't exist
2025-07-13 12:59:45 2025-07-13T04:59:45.177297Z 0 [Warning] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-003543 - The mysql.component table is missing or has an incorrect definition.
2025-07-13 12:59:45 2025-07-13T04:59:45.177400Z 0 [ERROR] [MY-000067] [Server] unknown variable 'default-authentication-plugin=mysql_native_password'.
2025-07-13 12:59:45 2025-07-13T04:59:45.177794Z 0 [ERROR] [MY-010119] [Server] Aborting
2025-07-13 12:59:46 2025-07-13T04:59:46.730361Z 0
你遇到的 MySQL 启动失败 的主要原因在于:
[ERROR] [MY-000067] [Server] unknown variable 'default-authentication-plugin=mysql_native_password'.
这是因为 MySQL 8.4.5 版本已经移除了或更改了 default-authentication-plugin
这个参数的支持方式,所以这个参数不能直接这样用。下面是详细分析与解决办法:
--default-authentication-plugin
的支持变动较大,很多场景下无需再显式指定,或者需要改为在 my.cnf 文件中配置。command: --default-authentication-plugin=mysql_native_password
这会导致新版本直接报错、无法启动。command
配置将 docker-compose.yml 文件里的
yamlcommand: --default-authentication-plugin=mysql_native_password
整行删除!
MySQL 8 默认的认证插件现在已经是兼容 Gogs 这种需求的了,无需强行指定。
如果你之前尝试启动失败,./mysql-data
目录里已经有部分错误的数据库初始化内容。建议你先清空数据卷再重试:
bashrm -rf ./mysql-data/*
或者直接删掉整个 mysql-data
文件夹。
yamlmysql: image: mysql:8.4.5 restart: always environment: MYSQL_ROOT_PASSWORD: gogsroot MYSQL_DATABASE: gogs MYSQL_USER: gogs MYSQL_PASSWORD: gogs123 volumes: - ./mysql-data:/var/lib/mysql networks: gogsnet: ipv4_address: 172.27.96.10
bashrm -rf ./mysql-data/*
bashdocker compose up -d
Table 'mysql.component' doesn't exist
这种提示一般是数据库初始化失败后遗留的,不影响后续正常初始化(如果卷已清空)。command: --default-authentication-plugin=mysql_native_password
mysql-data
挂载目录docker compose up -d
这样 MySQL 8.4.5 应该就可以正常启动了!
如还有报错,把完整日志发我,我帮你逐步定位。
我不想使用172.27.96.1了,想更改为本地127.0.0.1
完全可以,绑定到本地 127.0.0.1
更安全,只允许本机访问(外网不可访问)。你只需要修改 docker-compose.yml 端口映射部分即可,网络配置部分可以保持默认或者精简。下面详细教你如何操作。
docker-compose.yml
端口映射找到 gogs 服务下的 ports
配置,改为如下:
yamlservices: gogs: ... ports: - "127.0.0.1:3000:3000" # 只允许本机访问 Web - "127.0.0.1:10022:22" # 只允许本机 SSH ...
这样,只有本机能访问,浏览器访问 http://127.0.0.1:3000 即可。
注意:MySQL 不需要映射端口,因为只给 gogs 容器内部访问即可。
yamlversion: '3.8' services: mysql: image: mysql:8.4.5 restart: always environment: MYSQL_ROOT_PASSWORD: gogsroot MYSQL_DATABASE: gogs MYSQL_USER: gogs MYSQL_PASSWORD: gogs123 volumes: - ./mysql-data:/var/lib/mysql gogs: image: gogs/gogs:latest depends_on: - mysql restart: always volumes: - ./gogs-data:/data ports: - "127.0.0.1:3000:3000" # 只在本地监听 - "127.0.0.1:10022:22" # 只在本地监听
bashdocker compose up -d
数据库主机地址填 mysql:3306
,其他和之前一样:
git clone ssh://[email protected]:10022/用户名/仓库名.git
如需对外提供服务,再换回 0.0.0.0 或指定公网IP。如果有其他需求欢迎继续问!
http://127.0.0.1:3000/install the browser says:Database setting is not correct: dial tcp 127.0.0.1:3306: connect: connection refused
你遇到的这个错误:
Database setting is not correct: dial tcp 127.0.0.1:3306: connect: connection refused
原因解析:
Gogs 是通过 Docker 网络去访问 mysql
服务的,而不是通过你本机的 127.0.0.1。
在 Docker Compose 里,Gogs 容器访问 MySQL,应该用服务名 mysql
(即 mysql:3306
),不能填 127.0.0.1:3306
。
在 Gogs 安装界面:
mysql:3306
gogs
gogs123
gogs
mysql:3306
)。应该看到 MySQL 正常启动。bashdocker ps docker logs <你的 mysql 容器名>
请在 Gogs 安装页的“数据库主机”输入 mysql:3306
,不要填 127.0.0.1。
如果照这样设置还有报错,把新报错贴给我,我继续帮你分析!