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