马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为了让 Docker 容器在启动后保持运行状态,即使你不需要实行特定的使命或脚本,你可以使用几种差别的方法。以下是几种常见的策略:
总结: 建议使用第一种,使用tail -f /dev/null
1. 使用 tail -f /dev/null (亲测可用)
这种方法非常简朴且常用。tail -f /dev/null 会持续监听 /dev/null 文件的厘革,但由于 /dev/null 是一个空设备文件,实际上永远不会有任何厘革发生,因此这个下令会无限期地阻塞,从而使容器保持运行。
Dockerfile 示例:
- FROM your_base_image
- # 其他指令...
- CMD ["tail", "-f", "/dev/null"]
复制代码 下令行示例:
- docker run -d your_image_name tail -f /dev/null
复制代码 2. 使用 sleep infinity
另一个简朴的办法是让容器实行 sleep infinity 下令。这会让容器休眠直到被手动停止。
- Dockerfile 示例:
- FROM your_base_image
- # 其他指令...
- CMD ["sleep", "infinity"]
- 命令行示例:
- docker run -d your_image_name sleep infinity
复制代码 3. 使用 while true; do sleep 1000; done
这是一种更传统的做法,通过创建一个无限循环来保持容器运行。固然它也能达到目标,但不如前两种方法优雅。
- Dockerfile 示例:
- FROM your_base_image
- # 其他指令...
- CMD ["sh", "-c", "while true; do sleep 1000; done"]
- 命令行示例:
- docker run -d your_image_name sh -c "while true; do sleep 1000; done"
复制代码 4. 使用后台服务
假如你的容器是为了运行某些服务(如 Web 服务器、数据库等),确保这些服务是在前台运行的。大多数服务默认情况下会在后台运行,但这会导致 Docker 以为该进程已经结束并关闭容器。你可以通过指定参数来让服务在前台运行。
比方,对于 Nginx:
- docker run -d nginx:latest nginx -g "daemon off;"
复制代码 大概在 Dockerfile 中:
- FROM nginx:latest
- CMD ["nginx", "-g", "daemon off;"]
复制代码
- 使用 Supervisord 或其他进程管理工具
对于需要同时运行多个进程的情况,可以使用像 supervisord 如许的进程管理工具。它不仅可以管理多个进程,还能确保它们都在前台运行,并在须要时主动重启。
Dockerfile 示例:
- FROM your_base_image
- RUN apt-get update && apt-get install -y supervisor
- COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
- CMD ["/usr/bin/supervisord"]
复制代码 最后建议,使用tail -f /dev/null
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |