windows - Docker:如何在容器启动时执行批处理文件并将用户保持在 cmd/session 中

标签 windows batch-file cmd docker dockerfile

我在带有 Windows 容器的 Windows 2016 Server TP4 上使用 Docker。

当容器启动时,我想执行某个初始化脚本 (init.bat),但也想让用户保持登录到容器 session (在 cmd 中)。

有了这个 dockerfile:

FROM windowsservercore
ADD sources /init
ENTRYPOINT C:/init/init.bat

和这个 init.bat(它应该在启动时在容器内运行):

mkdir C:\myfolder
echo init end

这个启动调用容器:

docker run -it test/test cmd

init.bat 批处理文件在容器内执行,但用户不会在容器中保持登录状态,但容器会退出(退出代码为 0)。

我不太明白它为什么退出。根据我的理解 docker documentation :

If the image also specifies an ENTRYPOINT then the CMD or COMMAND get appended as arguments to the ENTRYPOINT.

cmd 命令应该附加到入口点,这是我的初始化脚本,但它没有。

我也试过这种语法,但没有什么区别。

ENTRYPOINT ["C:/init/init.bat"]

如果我从 dockerfile 中删除 ENTRYPOINT 并使用 cmd 命令启动容器,我会留在 session 中,当然我可以手动运行 init.bat 脚本并且它可以工作,但我希望它自动运行。

当我使用 Ubuntu 容器时,我通常使用 supervisord 来执行任何初始化脚本,并使用 bin/bash(相当于 Windows 上的 cmd)作为命令。 不过,我不确定如何在 Windows 容器上执行相同的操作。

最佳答案

您可以尝试在您的 Dockerfile 中放入类似这样的内容,而不是 ENTRYPOINT:

CMD C:\init\init.bat && cmd

关于windows - Docker:如何在容器启动时执行批处理文件并将用户保持在 cmd/session 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36206906/

相关文章:

go - bufio.Scanner 的无序输出

c++ - 使用删除时新声明包含垃圾值和堆损坏

windows - Linux 和 Windows XP 上的 OpenGL 性能差异

c - 调试断言失败。表达式(流!= NULL)

windows - 将带有 '&' 的路径传递给批处理文件

batch-file - 如何使批处理文件等待几分之一秒?

java - Java 中的批处理文件进程被终止 : xcopy does not close

batch-file - 我正在尝试制作一个自动更新的 .bat 程序

c++ - 在 C++ 中设置 Windows 系统时间

python - VS Code集成终端粘贴时把剪贴板python代码搞乱