CentOS7服务器构建Ruby on Rails API Docker镜像失败求助
解决Docker构建时rubygems.org域名解析失败问题
问题核心
生产环境CentOS7服务器上的Docker构建容器无法解析rubygems.org域名,导致gem install bundler命令超时失败。
解决方案
1. 排查宿主机网络连通性
先确认CentOS7服务器本身能否正常解析目标域名:
ping rubygems.org nslookup rubygems.org
如果宿主机也无法解析,修改宿主机DNS配置:
- 编辑
/etc/resolv.conf,添加可靠DNS服务器:nameserver 8.8.8.8 nameserver 114.114.114.114 - 重启网络服务:
systemctl restart network
2. 配置Docker守护进程DNS
Docker默认继承宿主机DNS,若宿主机DNS正常但容器仍无法解析,直接配置Docker daemon:
- 创建或编辑
/etc/docker/daemon.json:{ "dns": ["8.8.8.8", "114.114.114.114"] } - 重启Docker服务生效:
systemctl restart docker - 重新执行构建:
docker build -t api .
3. 构建时临时指定DNS
不想修改全局配置的话,可在构建命令中直接指定DNS:
docker build --dns 8.8.8.8 -t api .
4. 优化Dockerfile(可选)
为避免版本不一致并减少镜像层,合并RUN命令并指定与Gemfile.lock匹配的bundler版本:
FROM ruby:3.1.2 WORKDIR /app COPY Gemfile Gemfile.lock ./ RUN gem install bundler:2.2.28 && bundle install COPY . . EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]
内容的提问来源于stack exchange,提问作者Vitor Costa
相关产品推荐
相关产品推荐

