0
votes

Erreur "Lecture du paquet de communication initial" lors de la tentative de connexion à un conteneur de docker mysql depuis l'hôte

J'aimerais pouvoir me connecter à mon conteneur docker comme si le serveur MySQL était installé sur ma machine locale. Je teste ma connexion avec:

version: '2'

services:

    mysql:

        image: mysql:5.7.29
        container_name: some_mysql
        restart: unless-stopped

        volumes:
            - ./mysql/data:/var/lib/mysql
            - ./mysql/init:/docker-entrypoint-initdb.d

        ports:
            - 3306:3306

        environment:
            MYSQL_DATABASE: some_mysql
            MYSQL_USER: root
            MYSQL_PASSWORD: root
            MYSQL_ROOT_PASSWORD: root

Si je crée un conteneur à l'aide de docker, je peux le faire avec succès. Comme ça:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2

Si j'utilise un conteneur en tant que service dans docker-compose, j'obtiens une erreur:

docker run --name some-mysql-standalone -p 127.0.0.1:3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.29

Le serveur MySQL fonctionne à l'intérieur du conteneur et je peux y accéder.

Mon docker compose un extrait:

mysql -u root -proot -h 127.0.0.1 -P 3306 --protocol=tcp

La partie intéressante est que j'utilise ce docker-compose.yml depuis un certain temps maintenant sans aucun problème. Je ne suis pas vraiment sûr de ce qui a changé dans mon environnement qui a fait en sorte qu'il ne fonctionne plus.

Comment puis-je rendre mon conteneur mysql dans docker-compose accessible depuis la machine hôte?


0 commentaires

3 Réponses :


0
votes

Une erreur similaire a été trouvée sur ce fil . Essayez de voir si l'une des configurations de votre pare-feu a été modifiée et essayez de lier votre serveur SQL à 0.0.0.0 au lieu de localhost ou 127.0.0.1 .


1 commentaires

Merci pour votre suggestion, mais j'ai déjà essayé toutes les combinaisons possibles d'adresses IP, d'adresse de liaison et d'autres paramètres my.cnf. Supprimer complètement tous les conteneurs et images, vérifier que mysql a bien démarré à l'intérieur du conteneur, mettre à jour les subventions, créer de nouveaux utilisateurs mysql, même vérifier l'utilisation de mon disque :) De plus, tout est installé sur ma machine locale. Le docker 0.0.0.0:3306->3306/tcp, comme toujours, ce qui signifie qu'il a correctement lié le port à mon hôte et que ce port est effectivement utilisé. J'ai également essayé de redémarrer le service docker, mais je n'ai pas essayé de le réinstaller;)



0
votes

Du point de vue pratique, je l'ai fait fonctionner en créant explicitement un réseau . Voici un exemple:

version: '2'

services:

    mysql:

        image: mysql:5.7.29
        container_name: some_mysql
        restart: unless-stopped

        volumes:
            - ./mysql/data:/var/lib/mysql
            - ./mysql/init:/docker-entrypoint-initdb.d

        ports:
            - 3306:3306

        environment:
            MYSQL_DATABASE: some_mysql
            MYSQL_USER: root
            MYSQL_PASSWORD: root
            MYSQL_ROOT_PASSWORD: root
        networks: 
            - default

...


networks:
    default:
        external:
            name: somename_default

Je pensais que puisque je ne pouvais pas me connecter, je devrais essayer de supprimer et de créer un nouveau réseau, car docker-compose crée un réseau séparé pour les conteneurs dans les coulisses. Je ne connais toujours pas les raisons pour lesquelles j'ai été confronté à ce problème.


0 commentaires

0
votes

Parfois, je rencontre cette erreur après avoir arrêté et redémarré ma machine virtuelle. Le moyen de résoudre le problème consiste à redémarrer la machine virtuelle.


0 commentaires