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

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服务名>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:26:29