Tidak dapat mengakses mysql docker

Saya menggunakan docker-compose untuk membuat mysql wadah. Saya mendapatkan IP host 172.21.0.2.Tapi ketika saya menghubungkan mysql. Saya mendapatkan kesalahan:

  1. Saya 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. Dapatkan IP host saya docker inspect db_mysql_1 | grep IPAddress

    "IPAddress": "172.21.0.2",

  3. Akses 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

Bagaimana Saya bisa terhubung ke mysql container?

Anda dapat melewati variabel lingkungan tambahan ketika memulai wadah MySQL MYSQL_ROOT_HOST=<ip> ini akan membuat pengguna root dengan izin untuk login dari alamat IP yang diberikan. Dalam kasus di mana Anda ingin mengizinkan login dari IP Anda dapat menentukan MYSQL_ROOT_HOST=%.

Ini akan bekerja hanya untuk wadah yang baru dibuat.

Saat memutar wadah baru:

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

Dalam compose file itu akan menjadi:

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: '%'  # needs to be enclosed with quotes

Dalam kasus saya. Saya menghapus konfigurasi volume dan berhasil.

Cara ini bekerja untuk saya:

MYSQL_ROOT_HOST: '%'

Ini adalah apa yang bekerja untuk saya:

docker exec -it mysql1 mysql -u root -pupdate mysql.user set host='%' where user='root' and host = 'localhost';flush privileges;

perubahan mysql1 untuk nama kontainer anda.

PS: saya tidak menggunakan docker-compose.

Ketika Anda terhubung ke server MySQL, ia memeriksa itu GRANT tabel (tabel "pengguna" di " mysql| database Pada server MySQL) terhadap alamat IP dari Mesin klien MySQL yang menghubungkan. Jika ada TIDAK ADA ENTRI YANG COCOK di kolom "host" di tabel "pengguna" di database " mysql, MySQL akan segera menutup koneksi dengan ERROR 1130.

Periksa apakah klien mampu untuk mendapatkan ke port 3306 (Port MySQL) pada database server:

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

Anda harus masuk ke server MySQL, dan menjalankan "mysql" untuk memeriksa tabel grants:

# mysql mysqlmysql> 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" adalah berwenang untuk menghubungkan dari beberapa alamat IP, tetapi tidak dari klien IP 172.21.0.1. Jadi, tambahkan saja GRANT access dari IP itu:

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)

Kemudian, periksa koneksi Anda.