Docker:如何在容器启动时执行一个batch file,并保持cmd / session中的用户

我正在使用Windows容器在Windows 2016 Server TP4上使用Docker。

当容器启动时,我想执行一个特定的初始化脚本(init.bat),但也想保持用户login到容器会话(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.batbatch file在容器中被执行,但用户不会保持在容器中的logging,但容器退出(退出代码为0)。

我不太明白为什么退出。 从我如何理解docker文档 :

如果图像也指定了一个入口点,那么CMD或者COMMAND被作为参数附加到入口点。

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

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

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

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

当我使用Ubuntu容器时,我通常使用supervisord来执行任何初始化脚本和bin / bash(与Windows上的cmd等效)作为命令。 我不知道如何在Windows容器上做同样的事情。

而不是入口点,你可以尝试在你的Dockerfile中加入这样的东西:

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