You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器运行Python脚本无法接收终端交互输入问题

问题解决方案

你遇到的问题由3个配置错误导致,按以下步骤修改即可解决:

1. 修正run.sh启动脚本

原脚本存在shebang路径错误、timeout交互参数缺失、Python缓冲未关闭三个问题,修改后的内容如下:

#!/usr/bin/env bash
timeout --foreground --signal=SIGTERM 500 python3 -u main.py
exit $?

参数说明:

  • --foreground:让timeout命令将前台终端的交互信号、输入直接转发给Python子进程,不加该参数时timeout会将子进程放到后台运行,终端输入无法传递到脚本
  • -u:强制Python进程关闭标准输入输出的全缓冲,实时处理终端输入输出,避免内容滞留在缓冲区不被读取
  • 补全shebang的根路径前缀/,避免部分操作系统环境下脚本执行异常

2. 可选优化(推荐)

可以在Dockerfile中添加环境变量永久关闭Python全缓冲,无需每次执行脚本时加-u参数,修改后的Dockerfile如下:

FROM python:3
WORKDIR /app
USER root
ENV PYTHONUNBUFFERED=1
ADD . .
RUN chmod a+x ./main.py
RUN chmod a+x ./run.sh
ENTRYPOINT ["sh","./run.sh"]

3. 重新构建运行

你原来的docker运行命令已经添加了-ti分配交互终端的参数,无需修改,直接重新构建运行即可:

docker image build . -t testimg --rm
docker run -ti --name testimg testimg

运行后输入内容按回车,即可正常触发脚本的打印逻辑,500秒超时时间到后进程会自动终止。

内容的提问来源于stack exchange,提问作者xineta5158

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:30:01