在 MySQL docker 容器中应用迁移。找不到数据库

问题描述 投票:0回答:1

我正在使用alembic和sqlalchemy来迁移数据库。

容器正在运行并工作,因为我可以使用 phpmyadmin 来应用手动更改。

在我的虚拟环境中本地使用

alembic upgrade head
可以工作并更新 docker 容器中的数据库。

但是当尝试自动执行命令时,我遇到了问题。

尝试将其放入 Dockerfile 时:

FROM python:3.11 

WORKDIR /app

COPY ./requirements.txt ./requirements.txt

RUN pip install --no-cache-dir --upgrade -r ./requirements.txt

RUN alembic upgrade head

COPY  . /app

EXPOSE 8002:8002

CMD [ "python", "main.py" ]

跑步时会吐出

alembic: not found
docker compose up --build

尝试从 docker compose 文件运行命令时:

services:
  vsync-backend:
    container_name: vsync-backend
    build:
      context: /backend/.
      dockerfile: Dockerfile
    restart: always
    ports:
      - 8002:8002
    depends_on:
      - mysql
    command: bash -c "alembic upgrade head && python app/main.py"

  vsync-frontend:
    container_name: vsync-frontend
    build:
      context: /frontend/.
      dockerfile: Dockerfile
    ports: 
      - 3000:3000
    depends_on:
      - vsync-backend
    networks:
      - vsync-authentication
  
  mysql:
    container_name: mysql
    image: mysql:latest
    ports:
      - 3306:3306

    volumes:
      - mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=vsync
    networks:
      - vsync-authentication

  phpmyadmin:
    container_name: phpmyadmin
    image: phpmyadmin
    depends_on:
      - mysql
    ports:
      - 8081:80
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
      MYSQL_ROOT_PASSWORD: root
    restart: always
    networks:
      - vsync-authentication

networks:
  vsync-authentication:

volumes:
  mysql:

这给了我错误

sqlalchemy.exc.OperationalError: (MySQLdb.OperationalError) (2002, "Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)") (Background on this error at: https://sqlalche.me/e/20/e3q8)

为了测试它是否有效,我尝试在容器本身中运行升级命令。

同样的错误。

我检查了连接字符串(

mysql+mysqldb://root:root@localhost:3306/vsync
),用 mysql 容器名称替换了主机(带端口和不带端口)。但没有效果。

如何解决自动将迁移应用到数据库的问题?

python mysql docker sqlalchemy alembic
1个回答
0
投票

我明白了。

我的

vsync-backend
不在同一网络上。

我在这上面花了太多时间。

我现在就去哭。

© www.soinside.com 2019 - 2024. All rights reserved.