Mysql
 sql >> Base de données >  >> RDS >> Mysql

Docker ne peut pas connecter l'application à MySQL

docker-compose créera par défaut un réseau virtuel où tous les conteneurs/services du fichier de composition peuvent s'atteindre par une adresse IP. En utilisant des links , depends_on ou des alias de réseau, ils peuvent se contacter par nom d'hôte. Dans votre cas, le nom d'hôte est le nom du service, mais cela peut être remplacé. (voir :docs )

Votre script dans my_common_package le conteneur/service doit alors se connecter à mysql sur le port 3306 selon votre configuration. (pas localhost sur le port 3306 )

Notez également que l'utilisation de expose n'est nécessaire que si le Dockerfile du service n'a pas de EXPOSE déclaration. L'image mysql standard le fait déjà.

Si vous souhaitez mapper un port de conteneur sur localhost vous devez utiliser les ports , mais ne le faites que si c'est nécessaire.

services:
   mysql:
     image: mysql:5.6
     container_name: test_mysql_container
     environment:
       - MYSQL_ROOT_PASSWORD=test
       - MYSQL_DATABASE=My_Database
       - MYSQL_USER=my_user
       - MYSQL_PASSWORD=my_password
     volumes:
       - db_data:/var/lib/mysql
     ports:
       - "3306:3306"

Ici, nous disons que le port 3306 dans le conteneur mysql doit être mappé sur localhost sur le port 3306.

Vous pouvez maintenant vous connecter à mysql en utilisant localhost:3306 en dehors du menu fixe. Par exemple, vous pouvez essayer d'exécuter votre testsql.py localement (PAS dans un conteneur).

La communication de conteneur à conteneur se fera toujours en utilisant le nom d'hôte de chaque conteneur. Considérez les conteneurs comme des machines virtuelles.

Vous pouvez même trouver le réseau docker-compose créé à l'aide de docker network list :

1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. puis utilisez docker network inspect <id> pour regarder les détails.

Les adresses IP attribuées aux conteneurs peuvent être assez aléatoires, donc le seul moyen viable pour la communication de conteneur à conteneur est d'utiliser des noms d'hôte.