我觉得命令的--tty和--interactive开关之间有细微的区别docker run,我不明白:
--interactive, -i: 即使没有连接,也要保持 STDIN 打开--tty, -t: 分配一个伪 TTY所以我决定进行一些测试。
首先,我创建了一个基本的 Python 脚本,它连续打印一个字符串。
然后我创建了一个基本的 docker 镜像,它将在容器启动时运行这个脚本。
my_script.py
import time
while True:
time.sleep(1)
print('still running...')
Run Code Online (Sandbox Code Playgroud)
文件
FROM python:3.8.1-buster
COPY my_script.py /
CMD [ "python3", "/my_script.py"]
Run Code Online (Sandbox Code Playgroud)
使用命令构建:
docker build --tag pytest .
Run Code Online (Sandbox Code Playgroud)
测试 1
我运行docker run --name pytest1 -i pytest,以测试容器的交互行为。控制台没有打印任何内容,但是当我按下Control+Cpython 脚本时,该脚本被中断并且容器停止运行。
这证实了我认为标准输入在容器上打开并且我的键盘输入进入了容器的想法。
测试 2
我运行docker run --name pytest1 -t pytest,以测试容器的伪 tty 行为。它反复打印still running... …