带有脚本参数的 Docker 入口点

Anc*_*oli 0 docker wildfly

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

From Wildfly 
ENTRYPOINT["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)

但是我想在我们使用以下参数启动容器时传递入口点:-

docker run -it --entrypoint /opt/jboss/wildfly/bin/standalone.sh -Ddb_driver=mysql -b 0.0.0.0 -Duser=root  Wildfly 
Run Code Online (Sandbox Code Playgroud)

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

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

Ale*_*ock 5

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

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

这应该适合你:

ENTRYPOINT ["/opt/jboss/wildfly/bin/standalone.sh"]
CMD ["-b", "0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)

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

docker run -it Wildfly -Ddb_driver=mysql -b 0.0.0.0 -Duser=root
Run Code Online (Sandbox Code Playgroud)

会跑:

/opt/jboss/wildfly/bin/standalone.sh -Ddb_driver=mysql -b 0.0.0.0 -Duser=root
Run Code Online (Sandbox Code Playgroud)