【问题标题】:Docker - Windows contaier exits after scriptDocker - Windows 容器在脚本后退出
【发布时间】:2017-09-09 15:28:26
【问题描述】:

我制作了一些容器(它们在 Unix 环境中运行,入口点是一个脚本文件。这些脚本文件通常管理一些配置,然后使用 exec "$@" 继续执行 CMD。在创建/测试这样的图像我通常会返回到命令提示符,这样我就可以手动断言配置。这很好用。 然而,今天我正在制作一个类似的图像,但基于 windows 容器(microsoft/nanoserver),在这里我遇到了一些问题。

1) 我制作了一个 powershell 脚本来进行配置,但在 powershell 中我不能使用 exec "$@" 将执行传递给 CMD。 windows 容器中的等价物是什么?

2) 如果我创建一个基于 microsoft/nanoserver 的映像并仅复制一些文件,您将保持交互模式(当然,如果您使用 -it 参数运行容器)。但是一旦我将 ENTRYPOINT 指向一个 powershell 脚本,容器将在运行脚本后立即终止,即使我在运行命令中附加了一个 cmd。

所以基本上我的问题是:执行脚本后如何让它进入命令提示符? (带有 windows 容器)。

【问题讨论】:

  • 下面对我来说很好。运行脚本并返回提示 # escape=` FROM microsoft/nanoserver SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"] 入口点powershell.exe {写输出“你好”}; powershell.exe
  • 谢谢 Gregory,我让它按我的意愿工作了。但是我不知道 SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"] 的作用。同样有点奇怪的是,我们需要在 ENTRYPOINT 中有两个 powershell.exe 语句。
  • @Galtrold 你没有。使用SHELL ["powershell"],您的ENTRYPOINT 由powershell.exe 运行,因此它可以是任何有效的Powershell 表达式。您可以直接运行脚本文件或Invoke-Expression它。
  • 考虑这个使用脚本作为入口点的 docker 容器 github.com/PhilippHeuer/docker-gitlab-powershell

标签: docker containers windows-container


【解决方案1】:

这个问题类似于 How to keep WIndows Container running?

如果您在 dockerfile 末尾添加

ping -t localhost

它应该让它继续运行(......当然,除非文件中有其他错误)

【讨论】:

    猜你喜欢
    • 2018-01-18
    • 1970-01-01
    • 2019-06-23
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2015-08-24
    • 1970-01-01
    相关资源
    最近更新 更多