我使用以下命令在分离模式下创建docker容器:
docker run [OPTIONS] --name="my_image" -d container_name /bin/bash -c "/opt/init.sh"
所以我需要在创建容器时执行“/opt/init.sh”。我看到脚本完成执行后容器停止了。
如何在容器创建时使用脚本/服务执行将容器保持分离状态?
答案 0 :(得分:3)
有两种运行泊坞容器的模式
您需要的是背景模式。参数中没有给出这一点,但有很多方法可以做到这一点。
docker run -d --name = name container tail -f / dev / null
然后你可以像这样闯入运行容器:
docker exec -it name / bin / bash -l </ p>
如果使用-l参数,它将以登录模式登录,这将执行.bashrc,就像正常的bash登录一样。否则,你需要手动再次打击
#!/ bin / sh的
#/ entrypoint.sh
service mysql restart
...
tail -f / dev / null&lt; - 这永远不会结束
保存此entrypoint.sh后,chmod a + x,退出docker bash,然后按以下方式启动:
docker run --name = name container --entrypoint /entrypoint.sh
这允许每个容器都有自己的启动脚本,您可以运行它们而无需担心每次都附加启动脚本
答案 1 :(得分:0)
Docker容器将在其主进程结束时退出。在这种情况下,这意味着init.sh
何时结束。如果您只是尝试启动单个应用程序,则可以使用exec
在最后启动它,确保在前台运行它。使用exec
将有效地将被调用的服务/应用程序转换为主进程。
如果您要启动多项服务,最好使用supervisord
或runit
等流程管理器。您需要在前台启动进程管理器守护程序。 Docker文档包含example of using supervisord。