【发布时间】: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: true和tty: true。当我这样做时,它只是坐在那里等待,而不是提示用户输入他们的名字。 -
这是专门针对python的——请重新打开
-
@tripleee 你用错了副本。
标签: python docker docker-compose interactive