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