¿No se puede acceder a MySQL desde otro contenedor?
He leído este hilo y muchos otros tutoriales, pero todavía no puedo hacer que la conexión funcione.
Creé dos contenedores y están en la misma red net_a, y el contenedor MySQL se creó usando este comando:
docker run -itd –name mysql_a -p 3319:3306 -e MYSQL_ROOT_PASSWORD=passwd –network net_a mysql:latest
En el otro contenedor quiero acceder a una base de datos MySQL db_a usando PyMySQL, e intenté esto:
import pymysql.cursors
connection = pymysql.connect(
host=”mysql_a”,
user=”root”,
password=”passwd”,
database=”db_a”,
port=3319, charset=”utf8″)
cur = connection.cursor()
Pero surge un error:
-> 353 self.connect()
354
355 def enter(self):/ usr / local / lib / python3.8 / dist-packages / pymysql / connections.py en
conectarse (self, zapatilla)
662 si DEBUG:
663 print (exc.traceback)
-> 664 raise exc
665
666 # Si e no es DatabaseError o IOError, es un error.
OperationalError: (2003, “No se puede conectar al servidor MySQL en ‘mysql_a’ ([Errno 111] Conexión rechazada)”)
Pensé que era porque no estaban en la misma red, luego pingueé el nombre del contenedor mysql_a desde el otro contenedor y mostró esto:
PING mysql_a (172.18.0.3) 56(84) bytes of data.
64 bytes from mysql_a.net_a (172.18.0.3): icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from mysql_a.net_a (172.18.0.3): icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from mysql_a.net_a (172.18.0.3): icmp_seq=3 ttl=64 time=0.061 ms
64 bytes from mysql_a.net_a (172.18.0.3): icmp_seq=4 ttl=64 time=0.061 ms
Me pregunto por qué no funciona? ¿Quizás las redes de puente de un solo host no funcionan en este escenario y debería aprender algo sobre redes de superposición de varios hosts?
davy.ai
Parece que ha creado dos contenedores que están en la misma red
net_a
. También ha creado un contenedor MySQL usando el comandodocker run -itd --name mysql_a -p 3319:3306 -e MYSQL_ROOT_PASSWORD=passwd --network net_a mysql:latest
. Está intentando acceder a una base de datos MySQLdb_a
mediante PyMySQL, pero está obteniendo un error.Ha intentado hacer ping al nombre del contenedor
mysql_a
desde el otro contenedor y parece que ha tenido éxito. Es posible que las redes de puente de un solo host no estén funcionando en este escenario y que necesite aprender más acerca de las redes superpuestas de múltiples hosts.