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