Pengenalan
Percubaan untuk mengakses pangkalan data MySQL dalam Docker bekas boleh menghasilkan ralat akses yang dinafikan, walaupun ketika root kata laluan telah ditetapkan melalui pembolehubah persekitaran MYSQL_ROOT_PASSWORD. Isu ini boleh timbul disebabkan oleh salah faham tentang kesan data pangkalan data sedia ada pada pemula.
Masalah
Semasa permulaan kontena, jika volum dipetakan ke pangkalan data direktori data (db_data dalam kes ini) sudah mengandungi sistem fail pangkalan data, bekas akan menghormati pangkalan data sedia ada dan mengabaikan sebarang pembolehubah persekitaran yang berkaitan dengan permulaan, termasuk MYSQL_ROOT_PASSWORD. Akibatnya, percubaan untuk mengakses pangkalan data dengan bukti kelayakan yang dikonfigurasikan akan gagal.
Penyelesaian
Untuk menyelesaikan isu ini, pastikan anda memulakan bekas tanpa pra- volum pangkalan data sedia ada. Ini boleh dicapai dengan memadamkan volum data menggunakan arahan berikut:
docker-compose down -v
Selepas itu, bawa bekas itu ke atas semula dengan arahan docker-compose up -d. Proses ini akan memadamkan kandungan pangkalan data sedia ada dan memulakan pangkalan data baharu dengan kata laluan akar yang ditentukan disimpan dalam MYSQL_ROOT_PASSWORD.
Nota: Berhati-hati kerana arahan di atas akan memadamkan sebarang data yang sedia ada secara kekal dalam volum db_data. Jika anda ingin mengekalkan data ini, buat sandaran sebelum melaksanakan arahan ini.
Alternatif untuk Bind Mounts
Jika menggunakan bind mount, keluarkan kandungannya secara manual dengan menavigasi ke laluan bind mount dan melaksanakan yang berikut:
rm -rf /path/to/bind/mount/*
Lain-lain Maklumat Berkaitan
Pendekatan ini boleh digunakan pada imej docker MySQL. Walau bagaimanapun, perlu diingat bahawa imej docker pangkalan data rasmi yang lain, termasuk untuk PostgreSQL dan MongoDB, mematuhi proses pemula yang serupa dan mungkin mengalami isu yang sama apabila menggunakan volum data sedia ada.
Atas ialah kandungan terperinci Mengapa My Docker MySQL Container Menolak Akses Walaupun Menetapkan MYSQL_ROOT_PASSWORD?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!