【问题标题】:Docker Entry Point with Script Arguments带有脚本参数的 Docker 入口点
【发布时间】:2017-07-13 22:16:27
【问题描述】:

Dockerfile 我们可以定义入口点如下:-

From Wildfly 
ENTRYPOINT["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0"]

但是我想在我们启动容器时通过入口点,如下所示:-

docker run -it --entrypoint /opt/jboss/wildfly/bin/standalone.sh -Ddb_driver=mysql -b 0.0.0.0 -Duser=root  Wildfly 

但它不起作用,因为 docker 尝试将脚本参数(-D 和 -b)评估为 docker 命令参数。我也在引用中给出了入口点,但它不起作用。

如何在 docker 入口点传递脚本参数?

【问题讨论】:

    标签: docker wildfly


    【解决方案1】:

    --entrypoint 只允许指定一个字符串,该字符串被解释为要启动的二进制文件的名称/路径。这与您可以在 Dockerfile 中指定的不同,因为它允许指定 json 数组。

    此外,Dockerfiles 中的ENTRYPOINT 实际上与您使用它的目的不同。 ENTRYPOINT 应该只指定要调用的入口二进制文件,而CMD 指定该二进制文件的参数。如果没有指定ENTRYPOINTCMD 将成为入口点,同时还包含参数。

    这应该适合你:

    ENTRYPOINT ["/opt/jboss/wildfly/bin/standalone.sh"]
    CMD ["-b", "0.0.0.0"]
    

    现在当docker run 不带参数调用时,它将使用CMD 的值作为入口点的参数。当使用参数调用它时,指定的参数会附加到入口点,而不是 CMD 中定义的参数。例如:

    docker run -it Wildfly -Ddb_driver=mysql -b 0.0.0.0 -Duser=root
    

    将运行:

    /opt/jboss/wildfly/bin/standalone.sh -Ddb_driver=mysql -b 0.0.0.0 -Duser=root
    

    【讨论】:

      猜你喜欢
      • 2020-01-08
      • 2016-10-08
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多