LoginSignup
0
0

【Docker Compose】DB接続エラーの解決方法(mysql.connector.errors.DatabaseError: 2005 (HY000): Unknown MySQL server host 'db' (-2))

Posted at

はじめに

備忘録
どなたかのお役に立てれば幸いです。

問題の詳細

Docker Composeで動かしているMySQLコンテナへ、Pythonのmysql-connector-pythonや、PHPを使って接続しようとした際に、以下のエラーに遭遇しました。

ここではPythonの例を紹介します。

mysql.connector.errors.DatabaseError: 2005 (HY000): Unknown MySQL server host 'db' (-2)

以下のようなtest.pyを使ってDBに接続しようとしていました。

test.py
import os
import mysql.connector

conn = mysql.connector.connect(
    host=os.environ['DB_HOST'],
    port=os.environ['DB_PORT'],
    user=os.environ['DB_USER'],
    password=os.environ['DB_PASSWORD'],
    database=os.environ['DB_NAME']
)

conn.ping(reconnect=True)
cur = conn.cursor()

sql = "SELECT * FROM table"
cur.execute(sql, )
data = cur.fetchall()

また、.envは以下のようになっていました。

.env
DB_HOST = db
DB_PORT = 3306
DB_USER = test
DB_PASSWORD = test
DB_NAME = test

解決方法

上記のエラーを検索するとよく出てくるのが、DB_HOSTとしてdocker-compose.ymlで指定したコンテナ名にするという方法です。

以下の例であれば、dbDB_HOSTとなります。

docker-compose.yml
version: '3'
services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: test
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
    ports:
      - 3306:3306

ただ、今回エラーが発生したのは.dockerignoreの設定が間違っていたことが原因でした。

もともとは以下のように設定していましたが、.envが含まれていたことが原因で環境変数の読み込みがうまくいっていませんでした。

.dockerignore
.dockerignore
.git
.gitignore
README.md
*Dockerfile*
.env

.envを消すとうまくいきました。

.dockerignore
.dockerignore
.git
.gitignore
README.md
*Dockerfile*
- .env
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0