Macos 如何从连接的Docker容器中正常恢复?
假设我在一个终端窗口中运行此Docker命令:Macos 如何从连接的Docker容器中正常恢复?,macos,docker,terminal,htop,Macos,Docker,Terminal,Htop,假设我在一个终端窗口中运行此Docker命令: $ docker run --name stackoverflow --rm ubuntu /bin/bash -c "sleep 5" $ docker run -it --rm --pid=container:stackoverflow terencewestphal/htop 在它退出之前,我在第二个终端窗口中运行它: $ docker run --name stackoverflow --rm ubuntu /bin/bash -c "
$ docker run --name stackoverflow --rm ubuntu /bin/bash -c "sleep 5"
$ docker run -it --rm --pid=container:stackoverflow terencewestphal/htop
在它退出之前,我在第二个终端窗口中运行它:
$ docker run --name stackoverflow --rm ubuntu /bin/bash -c "sleep 5"
$ docker run -it --rm --pid=container:stackoverflow terencewestphal/htop
我将成功地看到htop
在第二个容器中运行,显示bash sleep进程正在运行。到目前为止还不错
5秒钟后,第一个容器将退出,代码0
。一切都好
此时,第二个容器将退出,代码为137
(SIGILL)。这对我来说也是有意义的,因为第二个容器刚刚连接到第一个容器
问题是这会弄乱macOS的终端。app
的状态:
我希望找到一种方法来避免弄乱Terminal.app的状态。有什么建议吗?您无法避免这种行为,因为htop有责任在终端终止后设置终端状态,但在使用SIGKILL终止时无法执行。但是,您可以使用
reset
命令自己修复此终端窗口,该命令用于初始化终端状态
关于“附加”容器:
--pid=container:
选项意味着新容器将在第一个容器的pid名称空间中运行,如下所述:
如果PID命名空间的“init”进程终止,内核
通过SIGKILL信号终止命名空间中的所有进程
太棒了,这是一个很好的解决我需要的方法。谢谢