docker-compose run执行django命令异常进入Postgres shell问题求助
问题根源
你的Django镜像entrypoint脚本开头的set参数配置写法完全错误,直接导致docker-compose run启动新容器时无法执行后续逻辑:
# 错误写法 bash | set -o errexit bash | set +o pipefail bash | set -o nounset
这种写法会在执行到这三行时启动独立的bash子进程,占用容器的标准输入输出,导致entrypoint后续的PostgreSQL可用性检查、你指定的python manage.py命令都不会被执行。你误以为进入了PostgreSQL shell,实际是进入了这个意外启动的bash子进程。
而docker-compose exec可以正常运行的原因是:exec是在已经启动的、完成了entrypoint执行的运行中容器内执行命令,不会重新跑entrypoint脚本,所以不受这个错误影响。
修复方法
- 把entrypoint脚本开头的三行错误配置删掉,替换为正确的shell参数配置:
set -o errexit set +o pipefail set -o nounset
- 你的start_dev启动脚本开头也有同样的错误写法,同步修改为上面的正确写法。
- 重新构建Django镜像后再执行
docker-compose run命令即可恢复正常:
docker-compose build django
内容的提问来源于stack exchange,提问作者xshapira
相关产品推荐
相关产品推荐

