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

Docker容器内Ruby脚本无法连接远程MySQL数据库求助

问题描述

我将Ruby脚本部署到Docker容器后,无法连接远程在线MySQL数据库,但未容器化时连接正常。尝试将数据库绑定地址从127.0.0.1改为0.0.0.0后问题依旧,容器运行后以退出码0结束,未建立数据库连接。

相关配置如下:

Dockerfile

FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential
WORKDIR home/docker
ADD Gemfile home/docker/Gemfile
ADD Gemfile.lock home/docker/Gemfile.lock
COPY Gemfile /home/dir_project/Gemfile
COPY Gemfile.lock /home/dir_project/Gemfile.lock
ADD . /home/docker
RUN bundle install

mysqld.cnf(数据库端配置)

bind-address = 172.17.0.1 (this is a docker Host IP)
mysqlx-bind-address = 172.17.0.1

database.yml(Ruby脚本配置)

development:
adapter: mysql12
username:....
password:....
host:172.17.0.1
database: my_db
port: 3307

尝试过的SSH隧道命令

ssh -L 3307:172.17.0.1:3306 ... (and link to db) 

排查与解决步骤

1. 修正数据库适配器错误

database.yml中adapter: mysql12是错误写法,Ruby连接MySQL的标准适配器为mysql2,修改后配置如下:

development:
  adapter: mysql2
  username: your_username
  password: your_password
  host: 172.17.0.1
  database: my_db
  port: 3307

2. 修正Dockerfile路径问题

Dockerfile中WORKDIR缺少根目录符号/,且存在重复拷贝Gemfile到不同目录的混乱,统一修改为:

FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential
WORKDIR /home/dir_project
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .

确保所有文件统一在工作目录下,避免脚本找不到配置文件。

3. 调整SSH隧道配置

若通过SSH隧道转发远程数据库,需将端口绑定到宿主机所有网卡(而非仅127.0.0.1),让容器可访问:

ssh -L 0.0.0.0:3307:<远程数据库IP>:3306 <SSH用户名>@<SSH服务器IP>

4. 检查MySQL用户权限

远程数据库用户需允许Docker容器所在IP段(如172.17.0.0/16)访问,或临时开放全局访问(生产环境谨慎使用):

GRANT ALL ON my_db.* TO 'your_username'@'%' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;

5. 测试容器网络连通性

启动容器后进入内部,测试网络是否正常:

# 进入容器
docker exec -it <容器ID/名称> bash
# ping宿主机IP验证连通性
ping 172.17.0.1
# 测试端口是否可访问
telnet 172.17.0.1 3307

若ping不通检查Docker网络模式,telnet不通则排查宿主机防火墙或隧道是否正常。

6. 查看容器日志定位具体错误

退出码0不代表执行成功,通过日志获取连接失败细节:

docker logs <容器ID/名称>

日志会明确显示错误原因(如权限不足、连接超时、适配器错误等),再针对性解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:22:40