docker - 如何干净地阻止容器重新启动 Kubernetes
问题描述
我想创建一个 nginx 容器,将本地机器 /home/git/html 的内容复制到容器 /usr/share/nginx/html 中。但是我不能使用 Volumes 和 Mountpath,因为我的 kubernetes 集群有 2 个节点。我决定从我的 github 帐户中复制内容。然后我创建了这个 dockerfile:
FROM nginx
CMD ["apt", "get", "update"]
CMD ["apt", "get", "install", "git"]
CMD ["git", "clone", "https://github.com/Sonlis/kubernetes/html"]
CMD ["rm", "-r", "/usr/share/nginx/html"]
CMD ["cp", "-r", "html", "/usr/share/nginx/html"]
dockerfile 可以正确构建,但是当我使用此映像应用部署时,容器会不断重新启动。我知道一旦 docker 完成了它的工作,它就会关闭,然后部署会重新启动它,从而创建循环。但是,当应用基本的 nginx 映像时,它可以正常工作。解决方案是什么?我看到解决方案无限期地运行一个进程以保持容器存活,但我认为这不是一个合适的解决方案。
谢谢 !
解决方案
RUN
如@tgogos 评论中所述,您需要在构建 docker 映像时使用来执行命令。请参阅参考。
你可以尝试这样的事情:
FROM nginx
RUN apt-get update && \
apt-get install git
RUN rm -rf /usr/share/nginx/html && \
git clone https://github.com/Sonlis/kubernetes/html /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
另外,我想建议您查看文档的这一部分,了解如何利用缓存层和多阶段构建优化您的图像。
推荐阅读
- python - 分布的迭代排列
- r - 在 pmin 中使用 na.rm=T 和 do.call
- php - 如何获取没有完整路径名的目录树迭代器的目录
- kotlin - Kotlin - 获取可空泛型类型推断的不可空推断
- nfc - Android Wear 上的 NFC 阅读器模式
- ruby-on-rails - 我正在尝试在数字海洋中部署,当最后一部分到达 ActiveSupport::MessageEncryptor::InvalidMessage
- javascript - onunload 如何影响页面性能
- system-verilog - 参数化接口的合法语法
- sql - SQL - 使用子查询提取最近日期的记录时查询超时
- mysql - MySQL | 如何使用正则表达式显示列?