Django项目使用Docker Compose启动时卡在“Attaching to”的解决方案
在使用Django和Docker Compose搭建开发环境时,常常遇到启动卡在“Attaching to”状态的问题。本文将深入分析该问题的原因,并提供有效的解决方法。
问题现象:
执行docker-compose up命令后,命令行停留在“Attaching to”状态,无法继续执行。docker ps -a显示容器状态为运行中(running),但docker logs没有输出任何日志信息。然而,使用docker run –rm -it … python manage.py runserver …命令直接运行镜像时,项目却能正常启动。
问题根源:
问题关键在于docker run命令使用了-it参数,而docker-compose up命令默认缺少该参数。-it参数的作用是为容器分配伪终端(pseudo-tty),使得容器能够与标准输入输出进行交互。docker run命令成功运行的原因正是因为-it参数,它允许容器接收和发送输入输出,从而正常运行Django的runserver命令并打印日志。
docker-compose up命令在默认情况下不分配伪终端,导致Django的runserver命令无法接收输入和输出,从而卡在“Attaching to”状态。尽管容器处于运行状态,但由于缺少标准输入输出,无法显示日志信息。
解决方案:
在docker-compose.yaml文件中,为Django服务添加tty: true参数,强制为容器分配伪终端。修改后的docker-compose.yaml文件示例:
version: "3"services: web: # or your service name build: . ports: - "8000:8000" command: ["python", "manage.py", "runserver", "0.0.0.0:8000", "--noreload"] tty: true
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。