【问题标题】:How to get interactive user input to python script running in Docker container?如何获取在 Docker 容器中运行的 python 脚本的交互式用户输入?
【发布时间】:2021-09-04 22:15:51
【问题描述】:

我有一个名为 my_python_script.py 的基本 Python 脚本,如下所示:

#!/usr/bin/env python
def main():
   x = input('What is your name? ')
    print('x = {}'.format(x))

if __name__ == "__main__":
    main()

当我从命令行本地运行它时,它的性能完全符合您的预期。

但是,现在我正在尝试从 Docker 容器中运行相同的脚本。所以我创建了一个Dockerfile,看起来像这样:

FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

我的docker-compose.yml 文件如下所示:

version: "3.7"
services:
  myservice:
    build:
      context: .
    entrypoint: /bin/bash
    command: -c "./my_python_script.py"
    volumes:
      - .:/usr/src/app

当我使用docker-compose up 运行它时,它会像这样失败:

Creating myservice_1 ... done
Attaching to myservice_1
myservice_1  | What is your name?  Traceback (most recent call last):
myservice_1  |   File "/usr/src/app/./my_python_script.py", line 7, in <module>
myservice_1  |     main()
myservice_1  |   File "/usr/src/app/./my_python_script.py", line 3, in main
myservice_1  |     x = input('What is your name? ')
myservice_1  | EOFError: EOF when reading a line
myservice_1 exited with code 1

如何让这个 Python 脚本在 Docker 容器中运行时接受来自我的键盘的交互式输入?

【问题讨论】:

  • 我想你在启动容器时需要-it 标志
  • -讨论了 docker compose here
  • 我在docker-compose.yml 中添加了以下两行,它们对应于-it 标志:stdin_open: truetty: true。当我这样做时,它只是坐在那里等待,而不是提示用户输入他们的名字。
  • 这是专门针对python的——请重新打开
  • @tripleee 你用错了副本。

标签: python docker docker-compose interactive


【解决方案1】:

根据this你可能想试试:

docker-compose run myservice

我不是 docker 专家,但我认为docker-compose up 会简单地从docker-compose.yaml 启动所有服务,然后输出所有服务的日志。

另请参阅docker-compose FAQ 的这一部分。

【讨论】:

  • 问题是如何让这些服务之一从标准输入读取输入。
  • 谢谢。但问题不是如何从 docker 容器中运行显示的脚本吗?我相信,如果是这样,这是一个合适的方法。此外,简单地添加 stdin_open: truetty: true 参数对我不起作用,似乎也不适用于 OP。另请参阅对您标记的副本的答案的赞成评论。
  • 对我来说它不是从标准输入读取的。
  • 确实,就像它说的那样,这并没有给你一个适当的交互会话,除非你用docker exec -it单独运行一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 2014-06-24
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多