Docker未按Dockerfile指定用Ruby2.7.7,仍用2.7.5的问题排查
Ruby版本不匹配问题排查与解决
不需要在Docker命令中指定Ruby版本,容器内的Ruby版本完全由Dockerfile控制,以下是具体排查和解决步骤:
检查Dockerfile基础镜像
确认Dockerfile开头的基础镜像明确指定了2.7.7版本,比如FROM ruby:2.7.7(或对应的变体如ruby:2.7.7-slim)。如果之前写的是ruby:2.7这类模糊版本,可能拉取到了2.7.5的镜像。
执行docker images查看本地Ruby镜像版本,若存在旧的2.7.5镜像,删除后重新构建:docker rmi ruby:2.7.5 docker compose build --no-cache清理容器缓存与卷
容器内的Bundler缓存可能残留旧版本依赖,彻底清理容器和关联卷后重新启动:docker compose down -v docker compose up也可以在Dockerfile中添加
RUN bundle clean --force,确保构建时清理旧缓存。排查本地版本管理器的干扰
虽然Docker环境隔离,但如果docker-compose.yml中挂载了本地的版本管理器目录(如~/.asdf、~/.rbenv)到容器内,会覆盖容器的Ruby配置。检查volumes配置,移除这类不必要的挂载。同时确认本地的.ruby-version文件没有被挂载到容器中。重新生成Gemfile.lock
如果本地用旧Ruby版本(2.7.5)生成过Gemfile.lock,该文件会被带入容器导致版本冲突。删除本地的Gemfile.lock,然后在容器内重新安装依赖生成新的锁文件:rm Gemfile.lock docker compose run --rm app bundle install
内容的提问来源于stack exchange,提问作者LMTofu
相关产品推荐
相关产品推荐

