我使用以下命令在分离模式下创建docker容器:
docker run [OPTIONS] --name="my_image" -d container_name /bin/bash -c "/opt/init.sh"
所以我需要在创建容器时执行“/opt/init.sh”.我看到脚本完成执行后容器停止了.
如何在容器创建时使用脚本/服务执行来保持容器的分离?
最佳答案 有两种运行docker容器的模式
>分离模式 – 此模式执行命令并在命令完成后终止容器
>前台模式 – 此模式运行bash shell,但在退出shell后也会终止容器
你需要的是背景模式.这不是参数中给出的,但有很多方法可以做到这一点.
>在分离模式下运行无限命令,因此命令永远不会结束,容器永远不会停止.我通常只使用“tail -f / dev / null”,因为它的重量非常轻,而且大多数linux映像中都存在/ dev / null
docker run -d –name=name container tail -f /dev/null
然后你可以像这样打入运行容器:
docker exec -it name /bin/bash -l
如果你使用-l参数,它将以登录模式登录,它将像普通的bash登录一样执行.bashrc.否则,您需要手动再次打包
>入口点 – 您可以创建任何sh脚本,例如/entrypoint.sh.在entrypoint.sh中,您也可以运行任何永不结束的脚本
#!/bin/sh
#/entrypoint.sh
service mysql restart
…
tail -f /dev/null <- this is never ending
保存此entrypoint.sh后,chmod a x,退出docker bash,然后像这样启动它:
docker run –name=name container –entrypoint /entrypoint.sh
这允许每个容器都有自己的启动脚本,您可以运行它们而无需担心每次都附加启动脚本