Dockerイメージからmysqlデータベースに接続しようとしています。ただし、エラーがスローされます。
以下は、私が使用しているdockerイメージです。 https://hub.docker.com/_/mysql/
以下は、Dockerイメージの実行に使用したコマンドです。
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8
以下はdocker ps
コマンドの出力です
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f35d2e39476 mysql:8 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp
docker inspectを使用してIPを確認し、そのIPにpingを実行すると、IPに到達できないことが示されます。
docker inspect 9f35d2e39476 | grep -i ipaddress
localhost
と127.0.0.1
を使用して接続しようとすると、次のエラーが発生します。
認証プラグイン「caching_sha2_password」をロードできません。
私は同じ問題を抱えていましたが、これはmysql 8.Xを実行するDockerコンテナーでそれをしませんでした。コンテナにログインしました
docker exec -it CONTAINER_ID bash
次に、ルートとしてmysqlにログインします
mysql --user=root --password
ルートのパスワードを入力します(デフォルトは「root」です)最後に実行:
ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';
設定はすべて完了です。
これはすでにここで回答されています: post
まず、安定していないソフトウェアを使用していることに注意してください。そのため、リリースと予期しない動作の間に大きな変化が生じる可能性があります。
第二に、他のネットにあるコンテナに直接pingすることはできませんが、別のコンテナを使用して簡単にpingできます。
mysql 8は、caching_sha2_password
の代わりにmysql_native_password
をデフォルトの認証プラグインとして使用します。 詳細はこちら 。
多くのmysqlドライバーは、caching_sha2_password
のサポートをまだ追加していません。
問題がある場合は、次のような方法で古い認証プラグインに変更できます。
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 mysqld --default-authentication-plugin=mysql_native_password
Docker-composeから起動するときに修正 here を見つけました:
services:
db:
image: mysql
command: mysqld --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
つまり、MySQLの起動時に新しいMySQLパスワード/認証メカニズムから復帰します。
ターミナル自体を使用してMySQLに接続しようとしている場合、バグのあるビルドが存在する可能性があります。ただし、Sequel ProなどのGUIクライアントを使用してMySQLに接続しようとしている場合、MySQL 8の新しい認証機能をサポートしていない可能性があります。
この回避策として、最後に--default-authentication-plugin=mysql_native_password
コマンドを使用してdockerコンテナーを起動すると、MySQLがデフォルトで古い認証を使用します。
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 --default-authentication-plugin=mysql_native_password
これはおそらく解決済みと見なされますが、これを克服するために必要なことを文書化したかったのです。私は同様の問題を抱えていましたが、古いパスワード標準に戻すことは解決策ではありませんでした。 caching_sha2_passwordを使用する必要があったため、上記のいずれも機能せず、このコマンドを使用する必要がありました。
docker run -it --rm mysql mysql -h 172.31.116.20 -p -P6603
172.31.116.20は、コンテナが実行されているローカルIPアドレスであり、-P6603は実行中のポートです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5092251b3dbf mysql "docker-entrypoint..." 16 minutes ago Up 16 minutes 33060/tcp, 0.0.0.0:6603->3306/tcp test1-mysql
MySQLコンテナのDockerサイトでこのソリューションを見つけました: https://hub.docker.com/_/mysql/
「MySQLコマンドラインクライアントからMySQLに接続する」セクションにあります。