簡體   English   中英

Docker + Mysql 連接錯誤:未知 MySQL 服務器主機 'db'

[英]Docker + Mysql ConnectionError: Unknown MySQL server host 'db'

我的 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

據此,我應該等待 MySQL 啟動? 但是,我在healthcheck文件的健康檢查部分添加了健康檢查,但它不起作用。

我也嘗試使用 netcat 檢查端口,但也沒有用。 為什么我無法從我的 Docker web容器連接到主機db 我究竟做錯了什么?

結果是我的問題,我需要清除我的 docker 卷並重新創建所有內容。 MySQL 在啟動時遇到錯誤

基本上跑了這個:

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

然后重新啟動一切,確保 MySQL (" db ") 在嘗試連接到db之前成功運行。

此消息抱怨缺少名為“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 將不在同一網絡上)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM