【问题标题】:How to pass dynamic values to Docker container?如何将动态值传递给 Docker 容器?
【发布时间】:2018-11-21 17:34:28
【问题描述】:

我正在Dockerfile 中运行一个 perl 脚本,我想在运行 docker 映像(容器)时将动态命令行参数传递给 perl 脚本。 例如: CMD perl test.pl <args>。我是 Docker 新手。

是否有任何可能的方法将动态值传递给 docker 容器,例如 docker run <image name> <args>?

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    我不确定您是否可以使用CMD 来执行此操作,但如果您只想使用一些传入的参数执行 perl 脚本,请使用ENTRYPOINT。

    ENTRYPOINT ["perl", "test.pl"]
    CMD ["default-arg"]
    

    运行容器:

    docker -run <image-name> overriding-arg
    

    【讨论】:

    • 谢谢,对我有用。
    • 我很高兴它有帮助
    【解决方案2】:

    您可以使用入口点脚本:

    $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

    和

    如果图像还指定了 ENTRYPOINT,则 CMD 或 COMMAND 将作为参数附加到 ENTRYPOINT。

    因此,根据您的Dockerfile,您将拥有类似这样的内容(python 示例应用程序):

    FROM jfloff/alpine-python:3.6
    
    # add entrypoint script
    USER root
    COPY start.sh /
    RUN chmod a+x /start.sh
    
    ENTRYPOINT ["/start.sh"]
    CMD ["arg1"]
    

    和start.sh:

    #!/bin/bash
    
    echo $1
    
    # don't exit
    /usr/bin/tail -f /dev/null
    

    现在您可以执行以下操作:

    15:19 $ docker run f49b567f05f1 Hello
    Hello
    15:21 $ docker run f49b567f05f1
    arg1
    

    现在,如果您的脚本设置为采用这些参数,您应该能够根据需要运行它。附上来自 Docker 的参考,在 this 中搜索 "Overriding Dockerfile image defaults",然后查看 CMD 部分。

    或查看this 发帖。

    【讨论】:

    • 感谢您的帮助和文档。我可以通过文档找到我的问题的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2015-08-10
    • 2017-02-19
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多