Docker + MYSQL:无法在容器外部访问mysql
我有2个docker容器,都包含MySQL数据库,我打开端口3305,3306每个。
对于3306:3306的容器,我可以通过容器访问它
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, Numeric, String import os cwd = os.getcwd() import sys sys.path.insert(0, cwd + '/vatic-docker/vatic') #from models import * engine = create_engine('mysql://root:1111' '@172.17.0.2:3306/vatic') Session = sessionmaker (bind = engine) session = Session() Base = declarative_base()
但是我不能通过访问3305:3306容器的mysql数据库
engine = create_engine('mysql://root:1111' '@172.17.0.3:3306/vatic')
哪些返回给我的错误消息:
sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2003, "Can't connect to MySQL server on '172.17.0.3' (111)")
我现在应该怎么做?
连接string中的端口是错误的
所以
engine = create_engine('mysql://root:1111' '@172.17.0.3:3306/vatic')
应该
engine = create_engine('mysql://root:1111@<host IP>:3305/vatic')
因为3305
是你在主机上暴露的端口
特别是如果Docker主机有一个IP地址192.168.2.100
那么连接应该是
engine = create_engine('mysql://root:1111@192.168.2.100:3305/vatic')
-p的格式是hostPort:containerPort
https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port–p—expose