LoginSignup
1
3

More than 1 year has passed since last update.

【docker✖️django】コンテナに入れ!2005, "Unknown MySQL server host...と2003, "Can't connect to MySQL server on...の解決方法!

Last updated at Posted at 2022-12-28

概要

  • DBマイグレーションを実施したらUnknown MySQL server hostとかpymysql.err.OperationalError:といったエラーが発生したので、その解決方法を残しておく。

環境

  • Mac
    • 機種ID:MacBookPro18,3
    • macOS:Monterey
    • チップ: Apple M1 Pro
    • メモリ: 16GB

前提

  • 会社で使っているdjangoプログラムを自分のローカル環境で触ることになった。djangoを覚えるためにも、DBのマイグレーションまで実施したい。
  • docker-compose.ymlの定義は以下の通り
    • serviceはdjango
    • web serverはnginx
    • databaseはmysql
  • settings.pyのDATABASESには‘HOST’: “mysql”と記載があり、docker-compose.ymlのDB名mysqlと一致してある

エラー内容

  • python3 manage.py makemigrationsの結果
/opt/homebrew/lib/python3.10/site-packages/django/core/xxxxxx/commands/makemigrations.py:143: RuntimeWarning: Got an error checking a consistent migration history performed for database connection 'default': (2005, "Unknown MySQL server host 'mysql' (8)")
 warnings.warn(
No changes detected
  • python3 manage.py migrateの結果
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'mysql' ([Errno 8] nodename nor servname provided, or not known)")

原因の追求

  • エラー文章を頼りに色々調べたが、どちらも“mysql”に関係があることと考えられる

  • dockerに関係があるかと思い、以下実施したが、関係なし

    • docker compose downdocker compose up -ddocker-compose down -vを実施
    • PCを再起動
  • 試しにsettings.pyのHOSTのmysqlをlocalhostのアドレス 127.0.0.1 と記入してマイグレーションを実施してみたが、以下エラーメッセージとなる。内容は変わっているが、今回とは関係なさそう。

django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

RuntimeError: cryptography is required for sha256_password or caching_sha2_password

解決方法

  • あっさり解決しました。さすが先輩!
  • 今回、dockerを利用しているので、DBマイグレーションする時もDockerのコンテナに入らないといけない。つまり、以下コマンドを実行する
    • コンテナ名は、docker-compose.ymlで定義したサービス名
docker exec -it [コンテナ名] bash
  • プロンプトが変わったことが確認できます。
  • bashに入ってから、manage.pyがあるディレクトリで、python3 manage.py migrateを行うと、、
Operations to perform:
  Apply all migrations: 
#####################
                ... OK
  • できたぁー!!!!!

  • docker compose up -dでコンテナを起動しているので問題ないと勘違いしていました。なるほど、コンテナに入ってbashでコンテナ環境とホストOS(カーネル等)をつないであげないといけなかったんですね。

1
3
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
1
3