【问题标题】:docker on windows ignoring ctrl-c [duplicate]Windows上的docker忽略ctrl-c [重复]
【发布时间】:2020-07-19 12:49:05
【问题描述】:

如果我跑

docker run alpine sleep 120

在 linux docker 主机上,可以按 CTRL-C 来停止容器。 如果我在适用于 Windows 的 Docker Desktop 上尝试相同的操作,则相同的方法不起作用。我测试了 WSL1、GitBash、CMD 和 powershell。 shell 会立即返回,但如果您执行docker ps,您会发现容器仍在运行...

我知道了,使用

docker run --init -it alpine sleep 120

几乎为我解决了这个问题。不幸的是,我需要重定向输出,这与 -t 的用法冲突(令人惊讶的是,仅在 Windows 上。在 Linux 上,docker 对此也很满意,但这次真的需要 --init,否则它会阻止 ctrl-c)

docker run --init -it alpine sleep 120 > somefile.log

即使在 GitBash 中,使用 winpty 也不起作用。

编辑:我刚刚意识到,最后一个命令似乎也适用于 CMD 和 PowerShell。只有 WSL 和 GitBash 行为不端...

如何让容器停止在 WSL 和 GitBash 中的 Windows 上使用 CTRL-C?

【问题讨论】:

    标签: windows docker


    【解决方案1】:

    TL;DR 从历史上看,你不能。

    我怀疑这会再改变,因为经过这么多年,这可能不再被认为是一个错误,而是一个特性:S。它肯定存在于许多会中断的 shell 脚本/批处理文件中。

    也许在 Windows 的新 Linux 子系统中运行 docker。如果您使用它,请在 Docker for Windows 中启用该复选框: https://docs.docker.com/docker-for-windows/wsl/

    只需在 Windows 上使用明确的docker container stop ...。 与 Linux 方式相比,您可以将其视为自动的“--detached”或“-d”,无论如何,您可以在许多在线示例/教程中看到这种方式。

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 2016-05-01
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多