具有脚本参数的Docker入口点

时间:2017-02-23 12:21:38

标签: docker wildfly

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入口点传递脚本参数?

1 个答案:

答案 0 :(得分:4)

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

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

这应该适合你:

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