私は、MySQLのドッキングウィンドウコンテナとDjangoアプリケーションを接続しようとしています。私はコンテナを構築するためのMySQLのMySQLすなわち8.0の最新バージョンを使用しています。私は正常にMySQLのコンテナを構築することができましたが、私は、DjangoのデフォルトのMySQL Connectorを使用して、それを接続することはできませんよ。私は実行するとdocker-compose up
、コマンドを私はエラーが下記得ます。
django.db.utils.OperationalError: (1045, 'Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory')
私は解決策を探し始めとMySQLは、MySQLコネクタのほとんどサポートされておらず、デフォルトの認証プラグインに大きな変化をリリースしたことを知るようになりました。
この問題を解決するには、私は設定する必要がありますdefault-authentication-plugin
にmysql_native_password
してmy.cnf
MySQLのコンテナのファイル。
私は、コマンドを使用してコンテナにログインdocker exec -it <conatiner id> /bin/bash
しても見つけることができたmy.cnf
コンテナ内のファイルを。
編集するmy.cnf
ファイルを私が使用する必要がありますnano
下に述べたようにコマンドを。
nano my.cnf
しかし残念ながらnano
コマンドは、MySQLコンテナにインストールされていません。インストールするにはnano
私が必要となりますsudo
コンテナにインストールされています。
私がインストールしようとしたsudo
上記のコマンドの下に使用してそれはうまくいきませんでした。
apt-get install sudo
エラー -
Reading package lists... Done
Building dependency tree
Reading state information... Done
この問題を解決するために可能な解決策は何ですか。
一般的に、あなたは、コンテナで直接編集するファイルにしようとしてはなりません。コンテナが停止して削除されたとして、これらの変更はすぐに失われてしまいます。多くのドッカーオプションが唯一の起動時に設定することができ、かつ容器にソフトウェアを更新するための標準的な方法は、新しいイメージでそれを再作成することですので、これは非常に日常起こります。あなたのケースでは、あなたはまた、ライブ編集、それはすでにそれを編集するあなたがしていることができた時間で設定ファイルを読み込む必要がありますので、メインのコンテナプロセスは、起動時に必要とする設定ファイルをすることはできません。
これを行うための正しい方法は、コンテナの起動時に変更したコンフィギュレーションファイルを注入することです。あなたがまだの場合は、画像のうち、デフォルトの設定ファイルを取得
docker run --rm mysql:8 cat /etc/mysql/my.cnf > my.cnf
そして、テキストエディタの選択を使用して、あなたのホスト上で、直接、それを編集します。あなたは、コンテナを起動すると、変更されたファイルを注入
docker run -v $PWD/my.cnf:/etc/mysql/my.cnf ... mysql:8
または、ドッカー作曲で、
volumes:
- ./my.cnf:/etc/mysql/my.cnf
ドッカーハブmysql
画像のドキュメントは、これを設定する方法のいくつかのより多くの提案を持っています。そこに「カスタムMySQLの設定ファイルの使用」を参照してください。
一方でdocker exec
、非常に便利なデバッグツールです、それはあなたのコアのワークフローの一部であってはならない、と私はこのようなケースでは、それを避けるためにしようとしてお勧めします。(バインド・マウントのアプローチでは、あなたのソース管理システムに変更設定ファイルを追加し、盲目的にすることができますdocker-compose up
。この詳細を知らなくても、通常のように、docker exec
あなたは、コンテナスタックを開始するたびに覚えていて、手で繰り返す必要があるだろうなアプローチを。)
また、あなたが必要としないことに注意してsudo
、すべてのドッカーで。あなたが何かを実行することができ、すべてのコンテキスト(Dockerfilesは、docker run
、docker exec
あなたができるようにする)、明示的にユーザーIDを指定するためのいくつかの方法がありますdocker exec -u root ...
。 sudo
一般的に、ユーザーがパスワードを有し、かつインタラクティブな本物のLinuxホストの管理に適していますが、一般的なドッカー環境に一致しない、プロンプトのようなものに依存します。