删除Docker容器后仍报No Rakefile found?Rails部署异常求助
解决Docker+Rails初始化时的"No Rakefile found"错误
核心原因
你修改后的entrypoint.sh会在执行rails new命令前,提前运行bundle exec rake db:create等需要Rakefile的命令,但此时Rails项目还未创建(rails new正是用来生成项目文件的),所以必然报错。即使恢复了官方entrypoint,Docker的镜像缓存、本地残留文件也会导致问题持续存在。
具体解决步骤
清理Docker镜像缓存
强制删除项目的web服务镜像,避免旧的entrypoint被复用:docker compose down --rmi web彻底清理本地项目残留文件
删除之前操作生成的不完整Rails文件,确保目录干净:rm -rf Gemfile Gemfile.lock Rakefile config app bin lib log tmp vendor清理Docker卷(若有挂载)
删除可能残留数据的卷,避免干扰新初始化:docker compose down -v恢复官方
entrypoint.sh并确保权限
官方entrypoint不会提前执行bundle或rake命令,内容如下:#!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /myapp/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@"给entrypoint添加执行权限:
chmod +x entrypoint.sh重新执行初始化命令
再次运行Rails项目初始化命令:docker compose run --no-deps web rails new . --force --database=postgresql后续正常流程
项目生成后,再修改entrypoint.sh加入bundle和数据库操作(此时Rakefile已存在),然后构建并启动服务:docker compose build docker compose up
为什么恢复后仍报错?
- Docker会缓存镜像层,若未重新构建镜像,容器仍会使用旧的entrypoint内容;
- 本地目录残留的不完整Rails文件会干扰命令执行,导致错误持续。
内容的提问来源于stack exchange,提问作者itsmarziparzi
相关产品推荐
相关产品推荐

