माईएसक्यूएल डॉकर तक नहीं पहुंच सकता

मैं उपयोग कर रहा हूँ docker-compose बनाने के लिए mysql कंटेनर। मुझे होस्ट आईपी मिलता है 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. मेरा होस्ट आईपी प्राप्त करें 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_ROOT_HOST=<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: '%'  # needs to be enclosed with quotes

मेरे मामले में । मैंने वॉल्यूम कॉन्फ़िगरेशन हटा दिया और यह काम किया ।

इस तरह यह मेरे लिए काम किया:

MYSQL_ROOT_HOST: '%'

यह मेरे लिए काम किया है:

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

बदलें mysql1 अपने कंटेनर नाम के लिए ।

पुनश्च: मैं उपयोग नहीं कर रहा हूँ docker-compose.

जब आप एक माईएसक्यूएल सर्वर से कनेक्ट करते हैं, तो यह जांचता है कि यह है GRANT कनेक्टिंग माईएसक्यूएल क्लाइंट मशीन के आईपी पते के खिलाफ तालिका ("माईएसक्यूएल सर्वर पर" माईएसक्यूएल| डेटाबेस में "उपयोगकर्ता" तालिका) । अगर वहाँ हैं कोई मिलान प्रविष्टियाँ नहीं "माईएसक्यूएल "डेटाबेस में" उपयोगकर्ता "तालिका में" होस्ट " कॉलम में, माईएसक्यूएल तुरंत कनेक्शन बंद कर देगा साथ में ERROR 1130.

जांचें कि क्या क्लाइंट डेटाबेस सर्वर पर पोर्ट 3306 (माईएसक्यूएल पोर्ट) प्राप्त करने में सक्षम है:

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

आपको माईएसक्यूएल सर्वर में लॉग इन करना चाहिए, और अनुदान तालिका की जांच करने के लिए "माईएसक्यूएल" चलाना चाहिए:

# 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      |

"रूट" है कई आईपी पते से कनेक्ट करने के लिए अधिकृत है, लेकिन क्लाइंट आईपी 172.21.0.1 से नहीं । तो, बस उस आईपी से अनुदान पहुंच जोड़ें:

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)

फिर, अपना कनेक्शन जांचें।