Ubuntu16.04下Docker部署Rails项目无法连接MySQL问题排查
解决Docker部署Rails项目时无法连接MySQL的问题
我来帮你排查这个连接问题——核心原因是你在Rails的数据库配置里用了本地socket或localhost,但Docker容器之间需要通过服务名来进行网络通信,而不是直接访问本地资源。下面是分步解决方法:
1. 修正database.yml配置
打开你的database.yml,把数据库连接的host改成docker-compose.yml里MySQL服务的名称(通常是mysql),同时移除socket相关配置,因为容器间用TCP连接而非本地socket。示例配置如下:
default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: <%= ENV.fetch("MYSQL_ROOT_PASSWORD") { "your_root_password" } %> host: mysql # 关键:这里用docker-compose的MySQL服务名,不是localhost development: <<: *default database: your_app_development test: <<: *default database: your_app_test
注意:确保password和database名称与你docker-compose.yml里MySQL服务的环境变量一致。
2. 确认docker-compose.yml的MySQL服务配置
检查你的docker-compose.yml,确保MySQL服务设置了必要的环境变量,并且web服务依赖于它:
version: '3' services: mysql: image: mysql:5.7 # 选择与你的Rails版本兼容的MySQL镜像 environment: MYSQL_ROOT_PASSWORD: your_root_password # 和database.yml里的密码一致 MYSQL_DATABASE: your_app_development # 自动创建初始化数据库 volumes: - mysql_data:/var/lib/mysql # 持久化数据库数据 ports: - "3306:3306" # 可选:本地端口映射,方便外部工具连接 web: build: . depends_on: - mysql # 确保web容器在mysql容器启动后再启动 volumes: - .:/app # 挂载本地代码到容器 environment: RAILS_ENV: development MYSQL_ROOT_PASSWORD: your_root_password # 传递密码给web容器 ports: - "3000:3000" volumes: mysql_data:
3. 验证容器间的网络连通性
有时候配置没问题,但容器间网络不通。你可以先启动MySQL容器,然后进入web容器测试连接:
- 停止所有容器:
docker-compose down - 启动MySQL容器:
docker-compose up -d mysql - 等待30秒左右(让MySQL服务完全启动),然后进入web容器:
docker-compose run --rm web bash - 在web容器里执行
ping mysql,如果能收到响应,说明网络正常。也可以用telnet mysql 3306测试端口是否开放。
4. 处理MySQL启动延迟问题
MySQL容器启动后,服务可能需要几秒才能就绪,直接运行bin/setup会因连接超时失败。你可以添加一个等待脚本解决这个问题:
- 在你的项目Dockerfile里安装
wait-for-it工具:
RUN apt-get update && apt-get install -y wait-for-it
- 修改docker-compose.yml里web服务的command,让它先等待MySQL就绪再执行setup:
command: sh -c "wait-for-it mysql:3306 -- bin/setup && rails s -b 0.0.0.0"
5. 重新执行setup
完成以上配置后,重新构建并运行setup:
docker-compose build docker-compose run --rm web bin/setup
这样应该就能成功连接到MySQL容器了。
内容的提问来源于stack exchange,提问作者lellefood
相关产品推荐
相关产品推荐

