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

Docker容器运行含用户输入的Python脚本出现EOFError的解决方法

解决Docker容器中Python脚本input()报错EOFError: EOF when reading a line的问题

这个问题的核心原因是:本地运行脚本时,你的终端是交互式的,能正常接收键盘输入;但Docker默认启动容器时,没有分配交互式终端也不会保持标准输入打开,当脚本执行到input()尝试读取输入时,找不到输入源就会抛出EOFError。

下面是几种可行的解决方法:

方法1:运行容器时开启交互式终端

执行docker run命令时,加上-it参数(-i保持标准输入打开,-t分配伪终端),这样容器就能和你的本地终端交互,让脚本正常获取输入。示例命令:

docker run -it --rm your-python-image python your-script.py

注:--rm参数是可选的,作用是容器退出后自动删除,避免残留无用容器。

方法2:预设输入(无需实时交互场景)

如果脚本的输入是固定值,不需要每次手动输入,可以通过管道传递输入或者环境变量的方式提供数据:

  • 管道传递输入:
    echo "1 2 3" | docker run --rm -i your-python-image python your-script.py
    
  • 环境变量传递:先修改脚本优先读取环境变量:
    import os
    numbers = os.getenv('INPUT_NUMBERS', input("Enter numbers: "))
    
    然后运行容器时传入环境变量:
    docker run --rm -e INPUT_NUMBERS="1 2 3" your-python-image python your-script.py
    

方法3:Docker Compose配置交互式会话

如果用Docker Compose管理容器,在docker-compose.yml的服务配置中添加tty: true和stdin_open: true:

services:
  python-script:
    image: your-python-image
    tty: true
    stdin_open: true
    command: python your-script.py

之后执行docker-compose up启动服务,就能在终端中输入数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:13:14