我试着让mysql与docker连接下面是我的docker compose文件:
version: "3.9"
services:
db:
# build: ./mysql
image: mysql:8
hostname: localhost
environment:
MYSQL_DATABASE: finops
MYSQL_USER: root
MYSQL_ALLOW_EMPTY_PASSWORD: 1
MYSQL_PASSWORD: Roh1t#mishra
# MYSQL_ROOT_PASSWORD: 'Roh1t#mishra'
# MYSQL_TCP_PORT: '3306'
ports:
- 3307:3307
expose:
- 3307
api:
build: ./cost-controller-engine
ports:
- 8023:8023
environment:
WAIT_HOSTS: db:3307
depends_on:
- db
links:
- db
expose:
- 8023
# Names our volume
下面是我使用sqlalchemy创建引擎代码:
engine = create_engine("mysql+mysqlconnector://root:Roh1t#mishra@127.0.0.1:3306/finops", echo=True)
但得到的错误
_mysql_connector.MySQLInterfaceError: Can't connect to MySQL server on '127.0.0.1:3306' (111)
帮助我使用sqlalchemy & docker连接MySQL。
1条答案
按热度按时间ymdaylpp1#
缺省数据库端口为3306,通过注解env行,它仍保持为3306(取消注解它并设置不同的值将更改端口)。
如果不需要从外部(容器外部)连接到数据库,则不需要
expose
/ports
,该端口当前设置为端口3307
,因此未使用。ports
设置也用作曝光 *如果我们使用docker compose,因此它很容易连接多个容器,我们使用容器名称进行网络调用,在这种情况下如果从容器
api
我要连接到容器db
中的数据库,我使用db:3306
,在你的代码中,它被称为127.0.0.1
,这是本地主机,它总是只调用自己。所以如果我从api
容器调用127.0.0.1
,我就调用api
。请尝试将其修改为:
create_engine("mysql+mysqlconnector://root:Roh1t#mishra@db:3306/finops")
个更新日期:
删除停靠合成中的
db.hostname: localhost
。成功连接到数据库后,我附加了示例测试文件。
第一个
docker-compose logs
的输出: