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

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

我正在尝试将带有 sqlAlchemy 的 FastAPI 连接到 mysql 数据库容器。

我正在使用别名。不幸的是,它无法连接,我不知道为什么。

在具有环境变量的外部端口上使用 MySQL Workbench 可以连接。

SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:3091@db:3306/investing"

这是docker撰写文件

version: '3.8'
services: 
  db:
    command: '--default-authentication-plugin=mysql_native_password'
    environment:
      - MYSQL_DATABASE=investing
      - MYSQL_ROOT_PASSWORD=3091
    image: mysql:8.0.28
    ports: 
      - "3307:3306"
    restart: on-failure
    volumes: 
      - "./db/init:/docker-entrypoint-initdb.d"
    # healthcheck:
    #   test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD


  # client:
  #   build: client
  #   ports: [3000]
  #   restart: always

  server:
    build: server
    ports: 
      - "5000:5000"
    restart: always
    depends_on:
      - db
    volumes:
      - ./server:/tmp
      - ./server/data:/tmp/data

Docker PS

CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS                         PORTS                                                  NAMES
cccbd4651340   react-flask-app_server   "python /tmp/app.py"     47 minutes ago   Restarting (0) 6 seconds ago                                                          react-flask-app_server_1
690185103a7b   mysql:8.0.28             "docker-entrypoint.s…"   47 minutes ago   Up 45 seconds                  33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   react-flask-app_db_1

有趣的是,在从 Flask 转换为 FastAPI 的过程中,我忘记取消对 uvicorn 的注释以真正正确地 运行 服务器。有点呜呜呜 xD。

# uvicorn.run(host="0.0.0.0", port="5000")

我完全惊讶它让我无法连接,而不是没有日志的纯退出代码 0。这真让我失望。

if __name__ == '__main__':
    uvicorn.run("app:app", host="0.0.0.0", port="5000")

PS。我的主文件是 app.py 而不是 main.py 因此 app:app 不是 main:app