【问题标题】:Why does docker run exit my terminal session?为什么 docker run 退出我的终端会话?
【发布时间】:2023-04-05 18:35:01
【问题描述】:

我在 MacOS Big Sur 上运行 Docker Desktop 3.5.1,我对以下行为完全感到困惑:

如果我运行docker run -it --rm postgres psql --help,我会得到 psql 使用信息(一切都符合预期),我可以继续在终端中运行命令。编辑澄清:docker 容器按预期退出并终止,但我的 zsh 会话保持活动状态(也如预期)。

但是,如果我使用无效标志运行 psql,例如 docker run -it --rm postgres psql -m,那么我会得到

/usr/lib/postgresql/13/bin/psql: invalid option -- 'm'
Try "psql --help" for more information.

[Process completed]

我的终端会话退出。编辑澄清:docker 容器按预期退出,但它需要主机 zsh 会话(意外)。

我要解决的是为什么我的终端会话退出以及如何避免这种情况发生?

【问题讨论】:

  • 你是如何运行docker run ...的?如果在 shell 提示符下键入命令时发生这种情况,我会感到非常惊讶。 (或者您在运行docker run ... 之前是否在shell 会话中执行了set -e?)

标签: postgresql macos docker terminal zsh


【解决方案1】:

要保持会话打开,您可以像这样执行 bash:

docker run --rm -it postgres /bin/bash

然后你可以运行任意数量的 psql 命令,除非 bash 退出,否则它不会退出。

编辑:

似乎可以在操作系统中配置终端关闭行为

https://stackoverflow.com/a/17910412/657477

【讨论】:

  • 我很困惑为什么@Jarym 说docker run -it --rm postgres psql --help 保持他的终端会话处于活动状态。它仍应退出会话,因为 psql --help 也会以 0 退出代码退出。
  • 你是对的,我错误地认为它正在打开终端会话或其他东西,但我刚刚尝试过,它也返回了退出代码。
  • 我不一定要在我的 docker 容器中使用 bash 会话,我只是不希望我的 Mac 终端 zsh 会话在发出的“docker run psql”(带有无效选项)终止时结束。
  • 当您在 docker 交互会话中执行无效命令时,是否会结束 docker 交互会话和您的 zsh 终端会话?如果是这样,请检查您的 zsh 中是否有任何特殊配置。尝试在您的 zsh 终端(不在 docker 内)运行无效命令 psql -m,看看它是否仍然存在
  • @Jarym 这不是问题。我只是想确保您可以在 zsh 终端中运行无效命令,并且仍然保持终端会话运行。所以即使你没有安装psql,你也可以试试psql -m,因为那个命令无论如何都是无效的。
【解决方案2】:

非常奇怪的行为,但@ErangaHeshan 的 cmets 指出我的 .zprofile 文件中有一些废话。一旦将其注释掉,docker 中的 psql 就会在退出时停止关闭我的主机 zsh 会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多