Docker镜像构建失败:mysql2psql gem原生扩展编译错误求助
解决MySQL到PostgreSQL迁移Docker镜像构建失败问题
我看到你在构建用于MySQL转PostgreSQL迁移的Docker容器时遇到了原生扩展编译失败的问题,结合你的Dockerfile和错误日志,我来帮你定位并解决问题:
问题复现
你的Dockerfile内容:
FROM ruby:2.4.0 RUN apt-get update && apt-get install -y \ build-essential \ nodejs \ mysql-client \ libmysqlclient-dev \ libpq-dev \ RUN mkdir -p /app WORKDIR /app RUN gem install mysql2psql
构建时触发的核心错误:
extconf.rb:67:in `
': uninitialized constant Config (NameError)
Did you mean? RbConfig
CONFIG
错误原因分析
- Ruby版本兼容问题:Ruby 2.4.x移除了顶层的
Config常量,统一使用RbConfig,而mysql2psql依赖的旧版本mysqlgem(这里是2.8.1)还在使用废弃的Config,导致编译原生扩展时抛出错误。 - Dockerfile语法小问题:你的
apt-get install命令行最后一行libpq-dev后面多了个反斜杠,虽然这不会直接导致gem安装失败,但会影响后续命令的执行逻辑,需要修正。
修复后的Dockerfile
下面是调整后的完整Dockerfile,解决了上述两个问题:
FROM ruby:2.4.0 # 修复apt命令语法,清理缓存减小镜像体积 RUN apt-get update && apt-get install -y \ build-essential \ nodejs \ mysql-client \ libmysqlclient-dev \ libpq-dev \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /app WORKDIR /app # 先安装兼容Ruby2.4的mysql gem版本,再安装mysql2psql RUN gem install mysql -v 2.9.3 && gem install mysql2psql
关键修改说明
- 修正apt命令:移除了
libpq-dev后面多余的反斜杠,同时添加&& rm -rf /var/lib/apt/lists/*清理APT缓存,避免镜像体积过大。 - 指定兼容的mysql gem版本:
mysqlgem的2.9.3版本修复了Config到RbConfig的兼容问题,提前安装这个版本后,mysql2psql会直接使用它,而不是拉取有问题的旧版本。
现在用这个Dockerfile重新构建,应该就能成功完成镜像的搭建了。
内容的提问来源于stack exchange,提问作者Jepzen
相关产品推荐
相关产品推荐

