我使用以下命令以分离模式创建 docker 容器:
docker run [OPTIONS] --name="my_image" -d container_name /bin/bash -c "/opt/init.sh"
所以我需要在创建的容器中执行“/opt/init.sh”。我看到容器在脚本执行完成后停止。
如何在容器创建时保持容器启动与脚本/服务执行分离?
docker容器运行有2种模式
- 分离模式 - 在这种模式下,您执行命令并在命令完成后终止容器
- 前台模式 - 在这种模式下,您运行 bash shell,但退出 shell 后也会终止容器
您需要的是后台模式。这没有在参数中给出,但有很多方法可以做到这一点。
- 在分离模式下运行无限命令,这样命令永远不会结束,容器也永远不会停止。我通常使用“tail -f /dev/null”,只是因为它相当轻,并且 /dev/null 存在于大多数 Linux 映像中
docker run -d --name=名称容器 tail -f /dev/null
然后你可以像这样进入正在运行的容器:
docker exec -it 名称 /bin/bash -l
如果使用 -l 参数,它将以登录模式登录,该登录模式将像普通 bash 登录一样执行 .bashrc 。否则,你需要再次手动bash里面
- 入口点 - 您可以创建任何 sh 脚本,例如 /entrypoint.sh。在entrypoint.sh中你也可以运行任何永无止境的脚本
#!/bin/sh
#/入口点.sh
mysql服务重启
...
tail -f /dev/null
保存这个entrypoint.sh后,对其进行chmod a+x,退出docker bash,然后像这样启动它:
docker run --name=名称容器 --entrypoint /entrypoint.sh
这允许每个容器都有自己的启动脚本,您可以运行它们而不必担心每次都附加启动脚本
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)