Linux Mint安装Saleor执行migrate命令报bytes-like object错误求解
问题根源
你遇到的报错有两层原因:
- 最核心的底层问题:你的Linux Mint系统上已经有进程占用了PostgreSQL默认的
5432端口,导致Saleor的数据库容器无法绑定端口启动 - 额外的工具层面报错:你当前使用的
docker-compose 1.25.0版本存在已知的兼容性bug,捕获端口占用错误时没有正确解码bytes类型的报错信息,才额外抛出了a bytes-like object is required, not 'str'的错误,这个报错掩盖了真正的端口占用问题。
解决步骤
第一步:处理5432端口占用
- 先查询占用5432端口的进程:
sudo lsof -i :5432 # 也可以用ss命令查询 ss -tulpn | grep :5432
- 如果你不需要用到本地运行的PostgreSQL服务,直接停止对应进程即可:
# 系统包安装的PostgreSQL可以用这个命令停止服务 sudo systemctl stop postgresql # 不需要开机自启的话可以执行禁用命令 sudo systemctl disable postgresql
- 如果你需要保留本地的PostgreSQL服务,就修改Saleor部署目录下的
docker-compose.yml配置:找到db服务的ports配置项,把宿主机端口改成其他未被占用的端口,比如改为5433:5432,这样容器内部还是用5432端口,宿主机暴露5433端口即可避免冲突。
第二步:(可选)升级docker-compose避免后续误导性报错
旧版docker-compose 1.25.0的bug会导致很多真实错误被掩盖,建议升级到官方推荐的v2版本:
# 卸载系统自带的旧版docker-compose sudo apt remove docker-compose # 安装新版docker-compose-plugin sudo apt install docker-compose-plugin # 验证安装是否成功 docker compose version
升级后后续执行命令用docker compose(空格代替横杠)即可。
第三步:重新执行迁移命令
处理完端口占用问题后,重新运行迁移命令即可:
# 未升级旧版docker-compose使用这个命令 docker-compose run --rm api python3 manage.py migrate # 升级到v2版本使用这个命令 docker compose run --rm api python3 manage.py migrate
内容的提问来源于stack exchange,提问作者Vadim
相关产品推荐
相关产品推荐

