web-dev-qa-db-ja.com

MySQL Dockerにアクセスできません

_docker-compose_を使用してmysqlコンテナを作成しています。ホストIP _172.21.0.2_を取得します。しかし、mysqlに接続すると、エラーが発生します:

  1. 私の_docker-compose.yml_:

    _version: '2'
    services:
    
    ### Mysql container
        mysql:
          image: mysql:latest
          ports:
           - "3306:3306"
          volumes:
           - /var/lib/mysql:/var/lib/mysql
         environment:
           MYSQL_ROOT_PASSWORD: root
           MYSQL_DATABASE: test_db
           MYSQL_USER: test
           MYSQL_PASSWORD: test_pass
    _
  2. ホストIPを取得する_docker inspect db_mysql_1 | grep IPAddress_

    _"IPAddress": "172.21.0.2",_

  3. Mysqlにアクセスします:_mysql -h 172.21.0.2 -P 3306 -u root -proot_。

    ERROR 1130 (HY000): Host '172.21.0.1' is not allowed to connect to this MySQL server

Mysqlコンテナーに接続するにはどうすればよいですか?

7
Quoc Dat

MySQLコンテナMYSQL_ROOT_Host=<ip>を起動するときに、追加の環境変数を渡すことができます。これにより、指定したIPアドレスからログインする権限を持つrootユーザーが作成されます。任意のIPからのログインを許可する場合は、MYSQL_ROOT_Host=%を指定できます。

これは、新しく作成されたコンテナに対してのみ機能します。

新しいコンテナを回転させるとき:

docker run --name some-mysql -e MYSQL_ROOT_Host=% -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

作成ファイルでは次のようになります。

version: '2'
services:

  ### Mysql container
  mysql:
    image: mysql:latest
    ports:
      - "3306:3306"
    volumes:
      - /var/lib/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
      MYSQL_USER: test
      MYSQL_PASSWORD: test_pass
      MYSQL_ROOT_Host: %
11
Mr.Coffee

MySQLサーバーに接続すると、それはGRANTテーブル(MySQLサーバー上の「mysql |データベース」の「user」テーブル)であるかどうかを、接続しているMySQLクライアントマシンのIPアドレスと照合します。 NO MATCHING ENTRIES「mysql」データベースの「user」テーブルの「Host」列MySQLは接続を即座に閉じますERROR 1130

クライアントがデータベースサーバーのポート3306(MySQLポート)に到達できるかどうかを確認します。

telnet 172.21.0.2 3306
Trying ::1...
Connected to 172.21.0.2.
Escape character is '^]'.

MySQLサーバーにログインし、「mysql」を実行して権限テーブルを確認する必要があります。

# mysql mysql

mysql> SELECT Host,user FROM user;
+-----------------+-----------+
| Host            | user      |
+-----------------+-----------+
| 172.21.0.5      | root      |
| 172.21.0.4      | root      |
| 127.0.0.1       | root      |
| ::1             | root      |
| localhost       | root      |

"root" is複数のIPアドレスからの接続が許可されていますが、クライアントIP 172.21.0.1からの接続は許可されていません。したがって、そのIPからGRANTアクセスを追加するだけです。

mysql> GRANT ALL PRIVILEGES ON root.* TO 'your_db'@'172.21.0.1' IDENTIFIED BY 'Password';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

次に、接続を確認します。

2
malyy