web-dev-qa-db-ja.com

ローカルからmysqlドッカーに接続できません

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

localhost127.0.0.1を使用して接続しようとすると、次のエラーが発生します。

認証プラグイン「caching_sha2_password」をロードできません。

14
Gaurang Shah

私は同じ問題を抱えていましたが、これは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

26
axelferreira

まず、安定していないソフトウェアを使用していることに注意してください。そのため、リリースと予期しない動作の間に大きな変化が生じる可能性があります。

第二に、他のネットにあるコンテナに直接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

24
Ivan Beldad

Docker-composeから起動するときに修正 here を見つけました:

services:

  db:
    image: mysql
    command: mysqld --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

つまり、MySQLの起動時に新しいMySQLパスワード/認証メカニズムから復帰します。

19
psychemedia

ターミナル自体を使用して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

1
Rohan

これはおそらく解決済みと見なされますが、これを克服するために必要なことを文書化したかったのです。私は同様の問題を抱えていましたが、古いパスワード標準に戻すことは解決策ではありませんでした。 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に接続する」セクションにあります。

0
Chris Clark