Mysql operational error(2003,“Can't connect to MySQL server on '127.0.0.1'([Errno 111] Connection refused)”)

yr9zkbsy  于 12个月前  发布在  Mysql
关注(0)|答案(1)|浏览(339)

我需要将Mysql数据库连接到FastAPI。MySQL使用自定义端口(17001)。我还需要使用docker-compose。
数据库:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DB_USER = 'api'
DB_PASSWORD = 'test'
DB_HOST = '127.0.0.1'
DATABASE = 'main'
DB_PORT = 17001

connect_uri = f'mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DATABASE}'

engine = create_engine(connect_uri)
Base = declarative_base()

from . import Models

Base.metadata.create_all(bind=engine)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

Docker-compose:

version: "3.8"

services:
  database:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_DATABASE: "main"
      MYSQL_ROOT_PASSWORD: "test"
      MYSQL_USER: "api"
      MYSQL_PASSWORD: "test"
      MYSQL_TCP_PORT: 17001
    ports:
      - "17001:17001"
    volumes:
      - ./MySQLData:/var/lib/mysql
    networks:
      - main
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:17001"]
      interval: 10s
      timeout: 10s
      retries: 10
  api:
    restart: on-failure
    build:
      dockerfile: ./api/Dockerfile
    volumes:
      - type: bind
        source: ./api
        target: /app
    ports:
      - 17002:17002
    depends_on:
      database:
        condition: service_healthy
    networks:
      - main

networks:
  main:

./api/Dockerfile

FROM python:3.9
WORKDIR /code
COPY ./api/requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./api /code/app
CMD ["python3", "/code/app/Main.py"]

当我使用docker compose up运行时,我得到了这个错误:

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

当我使用docker compose运行MySQL时,然后我手动运行API,一切正常。
如何解决此问题?

jv4diomz

jv4diomz1#

我已经忘记了--建造。为了运行,我使用docker compose up --build
感谢@python_user和@AndrewNolan的帮助

相关问题