热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker+MysqlConnectionError:未知的MySQL服务器主机'db'

我在Rails和MySQLDocker设置中遇到此错误:Mysql2::Error::ConnectionError:UnknownMySQLserver

我在Rails和MySQL Docker设置中遇到此错误:

Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (-2)
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `connect'
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `initialize'

我的docker-compose.yml

version: '3.7'
services:
db:
# https://github.com/passbolt/passbolt_docker/issues/103
image: mysql:5.7
restart: always
healthcheck:
test: ["CMD-SHELL",'mysql --database=$$MYSQL_DATABASE --password=$$MYSQL_ROOT_PASSWORD --execute="SELECT count(table_name) > 0 FROM information_schema.tables;" --skip-column-names -B']
interval: 30s
timeout: 10s
retries: 4
environment:
MYSQL_DATABASE: 'db'
MYSQL_USER: 'user'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'
ports:
- "3305:3306"
expose:
- '3305'
volumes:
- my-db:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- '.:/app'
ports:
- '3000:3000'
environment:
DB_PORT: 3306
DB_HOST: db
DATABASE_URL: mysql2://user:password@db:3306
depends_on:
- db
volumes:
my-db:

和我的database.yml

default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: user
password: password
host: localhost
url: <%= ENV['DATABASE_URL'] %>
port: 3305

根据this,我应该等待MySQL启动吗?但是,我在docker-compose文件的healthcheck部分中添加了运行状况检查,但该检查无效。

我也尝试使用netcat检查端口,但是它也没有用。为什么无法从Docker db容器连接到主机web?我在做什么错了?



此消息抱怨缺少名为“ db”的“ MYSQL主机”

Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (-2)

根据您的docker-compose文件

environment:
MYSQL_DATABASE: 'db'
MYSQL_USER: 'user'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'

您应该在此处选择有效的参数(甚至更好地使用ENV变量)。
还要确保


  1. 您可以使用指定的凭据从控制台访问MYSQL。

  2. 指定的MYSQL用户可以从外部主机访问(docker不在同一网络上)


,

要解决我的问题,我需要清除docker卷并重新创建所有内容。 MySQL was experiencing an error while booting up。

基本运行了此

docker-compose down
docker system prune --force --volumes

然后重新启动一切,确保MySQL(“ db”)在尝试连接到db之前已成功运行。


推荐阅读
author-avatar
忆--______100
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有