我如何从连接的Docker容器中正常恢复?
假设我在一个terminal窗口中运行这个Docker命令:
$ docker run --name stackoverflow --rm ubuntu /bin/bash -c "sleep 5"
在退出之前,我在第二个terminal窗口中运行这个:
$ docker run -it --rm --pid=container:stackoverflow terencewestphal/htop
我将成功地看到htop
在第二个容器中运行,显示正在运行的bash睡眠进程。 到现在为止还挺好。
5秒后,第一个容器将以代码0
退出。 都好。
此时,第二个容器将以代码137
(SIGILL)退出。 这对我来说也是有意义的,因为第二个容器只是附在第一个容器上。
问题是,这弄乱了macOS的Terminal.app
的状态:
- terminal的光标消失。
- 单击“terminal”窗口会将鼠标位置字符input为input。
我希望find一种方法来避免搞乱Terminal.app
状态。 有什么build议么?
你不能避免这样的行为,因为在终止之后设置terminal状态是htop责任,但是在用SIGKILL终止时不能这样做。 但是,您可以使用reset
命令自行修复此terminal窗口,该命令用于初始化terminal状态。
关于“附加”容器:
--pid=container:<name>
选项意味着新容器将在第一个容器的PID名称空间中运行,并且由于pid_namespaces(7)手册页说:
如果PID命名空间的“init”进程终止,则内核通过SIGKILL信号终止命名空间中的所有进程。