我使用以下命令以分离模式创建我的Docker容器:
docker run [OPTIONS] --name="my_image" -d container_name /bin/bash -c "/opt/init.sh"
Run Code Online (Sandbox Code Playgroud)
所以我需要在创建的容器上执行“ /opt/init.sh”。我看到的是,脚本执行完后容器已停止。
如何在创建容器时通过脚本/服务执行来使容器保持启动状态?
有两种运行docker容器的模式
您需要的是背景模式。这在参数中没有给出,但是有很多方法可以做到这一点。
docker run -d --name =名称容器尾巴-f / dev / null
然后,您可以像这样扑向正在运行的容器:
docker exec -it名称/ bin / bash -l
如果使用-l参数,它将以登录方式登录,该方式将像普通的bash登录一样执行.bashrc。否则,您需要手动重新进行内部打击
#!/ bin / sh
#/ entrypoint.sh
服务mysql重启
...
tail -f / dev / null <-这永远不会结束
保存此entrypoint.sh后,在其上执行chmod a + x,退出docker bash,然后按以下方式启动它:
docker运行--name = name容器--entrypoint /entrypoint.sh
这允许每个容器都有自己的启动脚本,您可以运行它们而不必担心每次都附加启动脚本
Docker 容器将在其主进程结束时退出。在这种情况下,这意味着何时init.sh结束。如果您只想启动一个应用程序,则可以exec在最后启动它,并确保在前台运行它。使用exec将有效地将被调用的服务/应用程序转变为主进程。
如果您要启动多个服务,则最好使用流程管理器,例如supervisord或runit。您需要在前台启动进程管理器守护进程。Docker 文档包含使用supervisord 的示例。