概要
Docker で MySQL データベースにアクセスしようとしましたroot パスワードが設定されている場合でも、コンテナはアクセス拒否エラーを引き起こす可能性があります。 MYSQL_ROOT_PASSWORD 環境変数を通じて設定されます。この問題は、初期化における既存のデータベース データの影響についての誤解が原因で発生する可能性があります。
問題
コンテナの初期化中に、ボリュームがデータベースにマップされている場合データ ディレクトリ (この場合は db_data) にはすでにデータベース ファイルシステムが含まれており、コンテナは既存のデータベースを尊重し、初期化に関連する環境変数を無視します。 MYSQL_ROOT_PASSWORD。その結果、構成された資格情報を使用してデータベースにアクセスしようとすると失敗します。
解決策
この問題を解決するには、事前にコンテナーを起動しないようにしてください。既存のデータベースボリューム。これを行うには、次のコマンドを使用してデータ ボリュームを削除します。
docker-compose down -v
その後、docker-compose up -d コマンドを使用してコンテナを再度起動します。このプロセスでは、既存のデータベースの内容が消去され、MYSQL_ROOT_PASSWORD に保存されている指定された root パスワードを使用して新しいデータベースが初期化されます。
注: 上記のコマンドは、既存のデータを完全に削除するため注意してください。 db_data ボリューム。このデータを保存したい場合は、これらのコマンドを実行する前にバックアップを作成してください。
バインド マウントの代替手段
バインド マウントを使用している場合は、次の手順に移動してコンテンツを手動で削除します。バインド マウント パスに追加し、次を実行します:
rm -rf /path/to/bind/mount/*
その他の関連情報
このアプローチは、MySQL Docker イメージに適用できます。ただし、PostgreSQL や MongoDB 用のイメージなど、他の公式データベース Docker イメージも同様の初期化プロセスに従っており、既存のデータ ボリュームを使用するときに同様の問題が発生する可能性があることに注意してください。
以上がMYSQL_ROOT_PASSWORD を設定しているにもかかわらず、Docker MySQL コンテナがアクセスを拒否するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。