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?
3 Réponses :
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
.
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;)
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.
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.