2017-02-23 51 views
0

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

回答

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