我正在使用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