IT评测·应用市场-qidao123.com技术社区

标题: 【Docker】docker启动下令,不实行特定程序,但是让容器保持启动 [打印本页]

作者: 美食家大橙子    时间: 2025-1-4 23:06
标题: 【Docker】docker启动下令,不实行特定程序,但是让容器保持启动
为了让 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;"]
复制代码
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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4