gpt4 book ai didi

kubernetes - 向工作发送参数

转载 作者:行者123 更新时间:2023-12-02 12:18:38 25 4
gpt4 key购买 nike

我有一个基本上运行一次性脚本的docker镜像。该脚本有3个参数。我的docker文件是

FROM <some image>

ARG URL
ARG USER
ARG PASSWORD

RUN apt update && apt install curl -y

COPY register.sh .
RUN chmod u+x register.sh

CMD ["sh", "-c", "./register.sh $URL $USER $PASSWORD"]

当我使用 docker run -e URL=someUrl -e USER=someUser -e PASSWORD=somePassword -itd <IMAGE_ID>旋转容器时,它工作得很好。

现在,我想将此部署为工作。

我的基本工作如下:
apiVersion: batch/v1
kind: Job
metadata:
name: register
spec:
template:
spec:
containers:
- name: register
image: registeration:1.0
args: ["someUrl", "someUser", "somePassword"]
restartPolicy: Never
backoffLimit: 4

但这荚错误
Error: failed to start container "register": Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"someUrl\": executable file not found in $PATH"

看起来好像是将我的args作为命令并尝试执行它们。那是对的吗 ?我该怎么做才能解决此问题?

最佳答案

在编写Dockerfile时,发生了两件事:

  • URL,用户名和密码在图像中固定。可以获取图像的任何人都可以运行docker history并以纯文本格式查看它们。
  • 容器启动不接受任何参数。它只运行带有固定参数集的单个命令。

  • 尤其是由于您计划在执行时传递这些参数,因此我不会尝试将它们包含在镜像中。我将Dockerfile减少为:

    FROM ubuntu:18.04
    RUN apt update \
    && DEBIAN_FRONTEND=noninteractive \
    apt install --assume-yes --no-install-recommends \
    curl
    COPY register.sh /usr/bin
    RUN chmod u+x /usr/bin/register.sh
    ENTRYPOINT ["register.sh"]

    启动它时,Kubernetes args:将作为命令行参数传递到入口点。 (这与Docker Compose command:和纯 docker run命令末尾的自由格式命令是相同的。)使脚本成为容器入口点将使Kubernetes YAML以您期望的方式工作。

    通常,我更喜欢使用CMD而不是ENTRYPOINT。 (除其他外,它使 docker run --rm -it ... /bin/sh调试图像构建更加容易。)如果这样做,那么Kubernetes args:需要包括正在运行的脚本的名称:
    args: ["./register.sh", "someUrl", "someUser", "somePassword"]

    关于kubernetes - 向工作发送参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53470357/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com