gpt4 book ai didi

docker - 如何将参数传递给特定于少数脚本但不针对入口点的docker run命令

转载 作者:行者123 更新时间:2023-12-02 19:21:12 24 4
gpt4 key购买 nike

我已经创建了如下的docker文件,

FROM XXXXXX.dkr.ecr.eu-west-1.amazonaws.com/baseImage:1.0.0

ARG USER_NAME
ARG PASSWD

COPY --chown=sdc:sdc libs/mysql-connector-java-8.0.11.jar ${SDC_HOME}/datacollector-jdbc-lib/lib/

#REPLACE CONFIG FILLE
COPY policies/config.properties "${SDC_CONF}"/config.properties

#######################################
# COPY PIPELINE
#######################################

COPY --chown=sdc:sdc pipelines/fullload/sns.json "${SDC_HOME}"/

COPY --chown=sdc:sdc postPipeline.sh /
RUN chmod 755 /postPipeline.sh

# Calling the script to post pipeline with argument1: pipeline name
# and argument2: pipeline filename
# and argument3: username(permission to deploy the pipeline)
# and argument3: password of above username
FROM base
RUN sed -i "/^exec.*/i \/postPipeline.sh 'fullload' 'sns.json' ${USER_NAME} ${PASSWD} &" /docker-entrypoint.sh

#######################################

USER ${SDC_USER}
EXPOSE PORT

ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["dc", "-exec"]

如果我对值进行硬编码,则效果很好。
但是我的问题是,如何在运行命令期间传递参数,以便 postPipeline.sh会受到这些参数而不是入口点的影响。
docker run -p port:port buildname <username> <passwd> 

因为根据docker Runbook,这些参数将覆盖当前的entrypoint参数。我不要

因此,为了将其保留为参数,我在下面尝试过,但是由于我想在运行时而不是构建时传递参数,因此这不起作用。
    FROM alpine:latest as base
ARG USER_NAME
ARG PASSWD

ENV USER_NAME=${USER_NAME}
ENV PASSWD=${PASSWD}

FROM XXXXXX.dkr.ecr.eu-west-1.amazonaws.com/baseImage:1.0.0



COPY --chown=sdc:sdc libs/mysql-connector-java-8.0.11.jar ${SDC_HOME}/datacollector-jdbc-lib/lib/

#REPLACE CONFIG FILLE
COPY policies/config.properties "${SDC_CONF}"/config.properties

#######################################
# COPY PIPELINE
#######################################

COPY --chown=sdc:sdc pipelines/fullload/sns.json "${SDC_HOME}"/

COPY --chown=sdc:sdc postPipeline.sh /
RUN chmod 755 /postPipeline.sh

# Calling the script to post pipeline with argument1: pipeline name
# and argument2: pipeline filename
# and argument3: username(permission to deploy the pipeline)
# and argument3: password of above username
FROM base
RUN sed -i "/^exec.*/i \/postPipeline.sh 'fullload' 'sns.json' ${USER_NAME} ${PASSWD} &" /docker-entrypoint.sh

#######################################

USER ${SDC_USER}
EXPOSE PORT

ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["dc", "-exec"]

为我的论点创建多阶段工作似乎很困难。那么,有什么建议可以实现这一目标吗?

最佳答案

您可以通过多种方式将配置传递给Docker容器-

  • 命令行参数
  • 环境变量
  • 安装配置文件

  • 对于您的用例,我知道 docker-entrypoint.sh将在内部调用 postPipeline.sh

    如果您有权修改 docker-entrypoint.sh,则可以使其也接受 postPipeline.sh所需的参数并在内部传递它们。

    如果您有权修改 postPipeline.sh,则可以使其从环境变量中读取配置。

    您可以将配置文件安装到容器中,并修改 docker-entrypoint.shpostPipeline.sh以从配置文件中读取参数。

    关于docker - 如何将参数传递给特定于少数脚本但不针对入口点的docker run命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59561883/

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