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

RoR Docker镜像部署至Azure后出现localhost:35729连接失败错误

解决方案

问题根源

35729是rack-livereload的默认livereload服务端口,你的部署环境中没有启动对应的livereload服务,但应用代码仍在尝试连接这个端口,导致Errno::EADDRNOTAVAIL错误。本地正常是因为开发环境下通常会自动启动livereload服务,而Azure部署的容器中缺少这个服务进程。

具体修复步骤

1. 确认Gemfile中rack-livereload仅在开发环境加载

检查你的Gemfile,确保rack-livereload被正确限定在development分组内,这样生产/部署环境不会加载该gem:

group :development do
  gem 'rack-livereload'
  # 其他开发环境依赖...
end

调整后重新构建Docker镜像,部署环境就不会加载这个gem,自然不会触发端口连接逻辑。

2. 强制在部署环境禁用rack-livereload中间件

如果因为代码依赖无法移除rack-livereload的开发环境分组,可在部署环境的配置文件中直接删除对应的中间件:
打开config/environments/production.rb(或你部署使用的环境配置文件),添加以下配置:

Rails.application.configure do
  # 其他现有配置...
  # 移除rack-livereload中间件
  config.middleware.delete Rack::LiveReload
end

3. 确保部署时使用正确的RAILS_ENV

在Docker启动命令或Dockerfile中明确设置生产环境变量,避免应用以开发环境模式运行:

  • 在Dockerfile中添加:
    ENV RAILS_ENV production
    
  • 或在Azure容器启动参数中设置环境变量:RAILS_ENV=production

4. 关于EXPOSE指令的说明

EXPOSE 35729仅作为Docker镜像的文档说明,不会自动启动端口对应的服务,也无法解决容器内部连接不存在服务的问题,所以之前的尝试无效是正常的。

内容的提问来源于stack exchange,提问作者CWarrington

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:05:00