跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Django+docker-compose运行卡在“Attaching to”:如何解决容器无法启动的问题?

Django项目结合Docker Compose部署:解决“Attaching to”卡死问题 许多开发者在使用Django和Docker Compose进行项目部署时,常常遇到一个难题:运行
docker-compose up
后,程序卡在“Attaching to”状态,无法启动。本文将深入分析此问题,并提供有效的解决方案。 问题现象: 用户使用Dockerfile和 docker -compose.yaml文件部署Django项目,执行
docker-compose up
后,容器状态显示为运行中,但始终停留在“Attaching to”状态,且日志为空。然而,使用
docker run --rm -it ponponon/twitter python manage.py runserver 0.0.0.0:8080
命令却能正常启动Django开发服务器。 Dockerfile:
FROM python:3.10-buster RUN /usr/local/bin/python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple RUN mkdir /code WORKDIR /code COPY requirements-prd.txt /code/ RUN pip install -i https://mirrors.aliyun.com/pypi/simple -r requirements-prd.txt COPY . /code/ ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONBUFFERED 1
docker-compose.yaml: Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载
version: "3" services: twitter: container_name: twitter image: ponponon/twitter ports: - "8000:8000" command: ["python","manage.py", "runserver", "0.0.0.0:8000","--noreload"]
问题分析与解决方案: 对比
docker run -it
和
docker-compose up
,关键区别在于TTY选项。
docker run -it
分配伪终端,而
docker-compose up
默认TTY为false,导致容器未连接终端。Django的
runserver
命令需要终端进行输入输出,因此TTY为false时,
runserver
无法正常工作,从而卡在“Attaching to”。 解决方法: 修改
docker-compose.yaml
文件,在
twitter
服务中添加
tty: true
选项。 修改后的
docker-compose.yaml
:
version: "3" services: twitter: container_name: twitter image: ponponon/twitter ports: - "8000:8000" command: ["python","manage.py", "runserver", "0.0.0.0:8000","--noreload"] tty: true
添加
tty: true
后,
docker-compose up
也会分配伪终端,解决“Attaching to”问题,使Django开发服务器正常运行。 需要注意的是,
--noreload
参数可能影响日志输出,请根据实际情况调整。

相关文章