我正在使用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 容器名称替换了主机(带端口和不带端口)。但没有效果。
如何解决自动将迁移应用到数据库的问题?
我明白了。
我的
vsync-backend
不在同一网络上。
我在这上面花了太多时间。
我现在就去哭。