Docker Swarm环境下Redmine插件安装失败:Ruby Gems无法获取依赖
Docker Swarm部署Redmine插件时bundle install失败的解决思路
核心问题是容器无法解析rubygems.org域名,同时Gemfile存在重复的puma依赖警告,以下是针对性解决步骤:
1. 排查容器DNS解析问题
- 进入运行中的Redmine容器:
docker exec -it <容器ID/容器名称> /bin/bash - 在容器内测试域名解析:
nslookup rubygems.org # 或用ping测试连通性 ping rubygems.org - 若解析失败,调整DNS配置:
- 在Swarm部署的compose文件中手动指定公共DNS服务器:
services: redmine: # 其他配置... dns: - 8.8.8.8 - 114.114.114.114 - 检查Swarm集群节点的宿主机DNS配置,确保宿主机能正常解析目标域名(容器默认继承宿主机DNS)
- 重启Swarm服务让DNS配置生效:
docker service update --force <redmine服务名>
- 在Swarm部署的compose文件中手动指定公共DNS服务器:
2. 修复Gemfile重复依赖
- 在容器内编辑Redmine根目录下的
Gemfile,删除重复的gem 'puma', '>= 0'条目 - 清理bundler缓存后重新尝试安装:
bundle clean --force bundle install
3. 替换rubygems国内镜像源
如果境外源访问受限,切换到国内镜像:
# 替换源 gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ # 确认源设置 gem sources -l # 重新执行安装 bundle install
4. 检查Swarm网络连通性
- 验证容器所在的overlay网络是否能访问外网:
docker run --network <你的Swarm overlay网络名> alpine ping rubygems.org - 若临时容器也无法访问,检查集群节点的防火墙规则、路由配置,确保允许容器对外访问443端口
5. 提前构建自定义Redmine镜像
避免每次部署都在线安装依赖,可基于官方镜像预安装插件:
FROM redmine:latest # 替换国内源 RUN gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ WORKDIR /usr/src/redmine # 复制插件到镜像内 COPY ./your-plugins/ plugins/ # 预安装依赖 RUN bundle install
构建镜像后更新Swarm服务:
docker build -t custom-redmine:latest . docker service update --image custom-redmine:latest <redmine服务名>
内容的提问来源于stack exchange,提问作者mls_dev
相关产品推荐
相关产品推荐

