【发布时间】: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