sqlalchemy.exc.OperationalError:无法在docker中连接到mysql

时间:2019-09-12 05:58:42

标签: python mysql docker sqlalchemy docker-compose

我正在使用sqlalchemy和mysql,对于本地安装的mysql来说,该过程运行良好,但无法将其与mysql docker映像连接。我正在使用pymysql作为驱动程序。这是我运行的命令行,出现以下错误。

以下是/docker-compose.yml和python文件的部分。另外,我有一个脚本可在docker mysql中创建一个名为“ sqlalchemy”的数据库,以下未显示。

/docker-compose.yml

services:
  db:
    build: ./database
    restart: always
    ports:
      - "3309:3306"
    environment:
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_HOST=db

/sqlalchemy.py

 msqldb_uri = 'mysql+pymysql://root:password@db:3309/sqlalchemy'
 engine = create_engine(msqldb_uri)



sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'db' ([Errno 111] Connection refused)")

1 个答案:

答案 0 :(得分:1)

如果脚本在容器内运行,则您不使用连接中的发布端口,而应在本地主机或同一网络中使用3306。发布端口用于外部世界。

 msqldb_uri = 'mysql+pymysql://root:password@localhost:3306/sqlalchemy'
 engine = create_engine(msqldb_uri)

如果脚本在同一docker-compose文件中的其他容器中运行,则您也不需要发布端口。

 msqldb_uri = 'mysql+pymysql://root:password@db:3306/sqlalchemy'
 engine = create_engine(msqldb_uri)

如果在主机和数据库上运行的脚本在容器内运行,那么您需要使用发布端口进行连接,但您不应将容器名称用作IP。

 msqldb_uri = 'mysql+pymysql://root:password@localhost:3309/sqlalchemy'
 engine = create_engine(msqldb_uri)