Docker部署Redmine对接外部数据库需确保数据库预先就绪并配置好权限与字符集,通过环境变量指定连接参数,推荐使用Docker Compose统一编排,挂载files卷保障附件持久化,启动后验证日志及登录状态。

用Docker部署Redmine并对接外部数据库,核心是让Redmine容器能稳定、安全地连接到独立运行的数据库服务(如MySQL、MariaDB或PostgreSQL),而不是使用内置SQLite。这种方式适合测试验证或生产环境,兼顾可控性与可维护性。
确认外部数据库已就绪
Redmine不负责管理数据库生命周期,需提前部署并配置好外部数据库实例:
- 确保数据库服务正在运行,且网络可达(例如宿主机、同一Docker网络、或内网IP)
- 创建专用数据库和用户,赋予
CREATE、SELECT、INSERT、UPDATE、DELETE等必要权限 - 推荐使用UTF8mb4字符集和
utf8mb4_unicode_ci排序规则,避免中文乱码或emoji报错 - 若数据库在宿主机上(如本地MySQL),注意Docker容器默认无法通过
localhost访问宿主机服务;Linux需用host.docker.internal(部分旧版本需手动添加)或宿主机真实IP;macOS/Windows Docker Desktop原生支持host.docker.internal
编写Redmine容器启动配置
使用docker run命令时,通过环境变量明确指定数据库连接参数:
-
REDMINE_DB_ADAPTER:填mysql2(MySQL/MariaDB)或postgresql(PostgreSQL) -
REDMINE_DB_DATABASE:数据库名(如redmine_production) -
REDMINE_DB_USERNAME和REDMINE_DB_PASSWORD:对应数据库用户的账号密码 -
REDMINE_DB_HOST:数据库地址(如192.168.1.100、host.docker.internal或自定义Docker网络中的服务名) -
REDMINE_DB_PORT:端口(MySQL默认3306,PostgreSQL默认5432)
示例命令(对接宿主机MySQL):
docker run -d \ --name redmine-external-db \ -p 3000:3000 \ -v redmine_files:/usr/src/redmine/files \ -e REDMINE_DB_ADAPTER=mysql2 \ -e REDMINE_DB_DATABASE=redmine_production \ -e REDMINE_DB_USERNAME=redmine \ -e REDMINE_DB_PASSWORD=redmine123 \ -e REDMINE_DB_HOST=host.docker.internal \ -e REDMINE_DB_PORT=3306 \ redmine:5.0.5
用Docker Compose统一编排(推荐)
更清晰、易复用的方式是用docker-compose.yml把Redmine和外部数据库声明为同网络下的服务,或显式指向外部数据库:
- 若数据库也在Docker中(如单独的
mysql服务),直接在depends_on和environment中引用服务名(如db)作为REDMINE_DB_HOST - 若数据库在Docker外(如云RDS、物理机MySQL),则将
REDMINE_DB_HOST设为该数据库的可访问IP或域名,并确保防火墙放行对应端口 - 务必挂载
/usr/src/redmine/files卷,否则附件上传后重启容器会丢失 - 首次启动时Redmine会自动执行数据库迁移(
db:migrate),前提是数据库用户有足够权限
片段示意(对接外部MySQL):
version: '3.8'
services:
redmine:
image: redmine:5.0.5
ports: ["3000:3000"]
volumes:
- redmine_files:/usr/src/redmine/files
environment:
- REDMINE_DB_ADAPTER=mysql2
- REDMINE_DB_DATABASE=redmine_production
- REDMINE_DB_USERNAME=redmine
- REDMINE_DB_PASSWORD=redmine123
- REDMINE_DB_HOST=10.0.2.15 # 外部数据库IP
- REDMINE_DB_PORT=3306
volumes:
redmine_files:验证连接与初始化
容器启动后,观察日志确认是否成功建表:
- 执行
docker logs -f redmine-external-db,看到Started GET "/"或Migration completed说明连接与初始化成功 - 若出现
Connection refused或Access denied,检查数据库地址、端口、用户名密码、网络连通性及用户权限 - 首次访问
http://localhost:3000,使用默认账号admin/admin登录,系统会强制要求修改密码 - 登录后进入
管理 → 信息页面,可查看当前数据库类型、版本及连接状态


















