Ubuntu18.04使用Docker Compose构建Rails容器时rubygems解析失败如何解决
解决方案
你遇到的报错核心是Docker容器内部域名解析失效,宿主网络正常不代表容器隔离网络内的DNS配置可用,按以下步骤操作即可解决:
- 首先确认拼写正确性:你执行
dig +short rubygmes.org无返回是因为目标域名拼写错误,正确RubyGems官方域名为rubygems.org,先检查Gemfile、bundler配置中是否存在拼写错误,如果有直接修正即可。 - 方案1:替换国内RubyGems镜像绕开境外解析问题
在Dockerfile的RUN bundle install步骤之前,添加全局源配置指令:RUN bundle config set --global source 'https://gems.ruby-china.com'
也可以直接修改项目Gemfile的第一行源地址为上述国内镜像地址,即可完全避开rubygems.org的解析需求。 - 方案2:修正Docker服务DNS配置
编辑宿主机/etc/docker/daemon.json文件(文件不存在则手动创建),添加公共DNS配置项:
保存后重启Docker服务生效:{ "dns": ["223.5.5.5", "8.8.8.8", "114.114.114.114"] }sudo systemctl restart docker - 方案3:临时使用宿主网络执行构建
如果修改DNS后仍未生效,可以在执行构建命令时指定使用宿主网络,绕开容器网络隔离的DNS限制:docker-compose run --no-deps --network host web rails new . --force --database=postgresql
执行完上述操作后,可先运行测试命令验证容器内解析是否正常:docker run --rm busybox nslookup rubygems.org
如果返回正常IP地址,即可重新执行构建流程。
内容的提问来源于stack exchange,提问作者Abdel P.
相关产品推荐
相关产品推荐

