【问题标题】:How to cleanly stop containers from restarting Kubernetes如何干净地阻止容器重新启动 Kubernetes
【发布时间】:2020-10-15 16:35:06
【问题描述】:

我想创建一个 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 映像时,它可以正常工作。解决方案是什么?我看到解决方案无限期地运行一个进程以使容器保持活动状态,但我认为这不是一个合适的解决方案。

谢谢!

【问题讨论】:

标签: docker nginx kubernetes


【解决方案1】:

感谢@tgogos 和@KoopaKiller 的帮助,我的 Dockerfile 如下所示:

FROM nginx

RUN apt-get update && \ 
    apt-get install git -y

RUN git clone https://github.com/Sonlis/kubernetes.git temp

RUN rm -r /usr/share/nginx/html



RUN cp -r temp/html /usr/share/nginx/html

CMD ["nginx", "-g", "daemon off;"]

kubernete pod 继续运行。

【讨论】:

    【解决方案2】:

    在构建 docker 镜像时,您需要使用RUN 来执行命令,如@tgogos 评论中所述。请参阅refer。

    你可以试试这样的:

    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;"]
    

    另外,我想建议您查看this part of documentation,了解如何利用缓存层和多阶段构建优化您的图像。

    【讨论】:

    • 非常感谢!它几乎立即工作,只是有一些语法错误来纠正apt-get update,apt-get install git -y,并且因为 /usr/share/nginx/html 已经存在,克隆到不同的目录,然后复制内容。
    • 太棒了!我已经用正确的命令更新了我的答案!
    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 2017-06-21
    • 2016-02-28
    • 1970-01-01
    • 2022-11-24
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多