Docker部署Rails应用报错‘rails new APP_PATH [options]’服务退出码0
问题分析与解决
核心原因
容器启动时执行的命令是rails new但缺少必要参数,或是你误把创建新项目的命令当成了启动现有应用的命令——rails识别到参数不足,输出了新应用创建的用法提示,执行完后正常退出(退出码0)。
常见问题及修复步骤
1. 启动命令配置错误
如果你的目标是运行已有的Rails应用,容器启动命令应该是启动服务器的rails server -b 0.0.0.0(绑定0.0.0.0让外部能访问),而不是rails new。
- Dockerfile修正示例:
CMD ["rails", "server", "-b", "0.0.0.0"] - docker-compose.yml修正示例:
services: web: # 其他配置 command: rails server -b 0.0.0.0
2. 本地代码未正确挂载到容器
如果要在容器里运行本地已有的Rails项目,必须确保卷挂载配置正确,把本地项目目录映射到容器内的工作目录:
services: web: # 其他配置 volumes: - .:/app # 假设容器内工作目录是/app,本地当前目录映射过去
同时Dockerfile里要设置工作目录:
WORKDIR /app
挂载错误会导致容器内没有现有项目文件,若启动命令有误用了rails new,就会输出用法提示。
3. 误把初始化命令当启动命令
如果是想在容器里初始化新Rails项目,必须给rails new传递应用路径参数,比如:
command: rails new . --force --database=postgresql
但这是一次性操作,执行完项目创建就会退出。之后要把启动命令改成rails server -b 0.0.0.0才能运行应用。
4. 工作目录配置错误
检查Dockerfile里的WORKDIR是否指向容器内存放Rails项目的正确位置。如果工作目录为空或不存在,执行rails new时未指定路径,就会输出用法提示。
验证步骤
- 确认本地是否已有完整的Rails项目结构(比如
Gemfile、app/文件夹)。 - 核对Dockerfile和docker-compose.yml里的命令、工作目录、卷挂载配置。
- 执行
docker compose run web bash进入容器,手动运行rails server -b 0.0.0.0,排查是否有依赖问题(比如未执行bundle install)。 - 若是初始化新项目,先执行
rails new创建项目,再修改启动命令为服务器启动指令。
内容的提问来源于stack exchange,提问作者merzy
相关产品推荐
相关产品推荐

