はじめに
備忘録
どなたかのお役に立てれば幸いです。
問題の詳細
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
で指定したコンテナ名にするという方法です。
以下の例であれば、db
がDB_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