gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:04:39 24 4
gpt4 key购买 nike

我在带有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com