【Docker】docker启动下令,不实行特定程序,但是让容器保持启动 ...

打印 上一主题 下一主题

主题 1887|帖子 1887|积分 5661

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为了让 Docker 容器在启动后保持运行状态,即使你不需要实行特定的使命或脚本,你可以使用几种差别的方法。以下是几种常见的策略:
总结: 建议使用第一种,使用tail -f /dev/null

1. 使用 tail -f /dev/null (亲测可用)

这种方法非常简朴且常用。tail -f /dev/null 会持续监听 /dev/null 文件的厘革,但由于 /dev/null 是一个空设备文件,实际上永远不会有任何厘革发生,因此这个下令会无限期地阻塞,从而使容器保持运行。
Dockerfile 示例:
  1. FROM your_base_image
  2. # 其他指令...
  3. CMD ["tail", "-f", "/dev/null"]
复制代码
下令行示例:
  1. docker run -d your_image_name tail -f /dev/null
复制代码
2. 使用 sleep infinity

另一个简朴的办法是让容器实行 sleep infinity 下令。这会让容器休眠直到被手动停止。
  1. Dockerfile 示例:
  2. FROM your_base_image
  3. # 其他指令...
  4. CMD ["sleep", "infinity"]
  5. 命令行示例:
  6. docker run -d your_image_name sleep infinity
复制代码
3. 使用 while true; do sleep 1000; done

这是一种更传统的做法,通过创建一个无限循环来保持容器运行。固然它也能达到目标,但不如前两种方法优雅。
  1. Dockerfile 示例:
  2. FROM your_base_image
  3. # 其他指令...
  4. CMD ["sh", "-c", "while true; do sleep 1000; done"]
  5. 命令行示例:
  6. docker run -d your_image_name sh -c "while true; do sleep 1000; done"
复制代码
4. 使用后台服务

假如你的容器是为了运行某些服务(如 Web 服务器、数据库等),确保这些服务是在前台运行的。大多数服务默认情况下会在后台运行,但这会导致 Docker 以为该进程已经结束并关闭容器。你可以通过指定参数来让服务在前台运行。
比方,对于 Nginx:
  1. docker run -d nginx:latest nginx -g "daemon off;"
复制代码
大概在 Dockerfile 中:
  1. FROM nginx:latest
  2. CMD ["nginx", "-g", "daemon off;"]
复制代码

  • 使用 Supervisord 或其他进程管理工具
    对于需要同时运行多个进程的情况,可以使用像 supervisord 如许的进程管理工具。它不仅可以管理多个进程,还能确保它们都在前台运行,并在须要时主动重启。
Dockerfile 示例:
  1. FROM your_base_image
  2. RUN apt-get update && apt-get install -y supervisor
  3. COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
  4. CMD ["/usr/bin/supervisord"]
复制代码
最后建议,使用tail -f /dev/null


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表