IYetAnotherInterface
我想通过环境变量指定入口点的尤里卡地址。但是当我使用docker run并使用ENV ADDRESS=http://peer1:8761/eureka/,http://peer2:8762/eureka/
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-jar","/app.jar", "--eureka.client.serviceUrl.defaultZone=$ADDRESS"]
时,它仍然是$ ADDRESS,可以正确替换,但是当我使用ENTRYPOINT像{ {1}},而我使用ENTRYPOINT java -jar xxxx
,则结束参数active = peer1不会生效,该如何在Entrypoint中使用环境变量和参数
答案 0 :(得分:0)
我刚刚尝试在dockerfile中解析PATH,但它仅适用于一种情况(虽然我使用CMD),但不确定是否有帮助。如果这样做不起作用,请让我详细了解。
有两种形式来指定命令(Exec形式和Shell形式),以及两种在dockerfile中指定默认命令的方式(ENTRYPOINT和CMD)。
执行表单:
FROM ubuntu
MAINTAINER xyz<xyz.gmail.com>
ENTRYPOINT ["ping"]
指定的命令(ping)将作为PID 1运行。这就是为什么我们按CTRL + C(SIGTERM)传递给PID1进程并且容器已关闭的原因。
外壳形式:
FROM ubuntu
MAINTAINER xyz<xyz.gmail.com>
CMD echo $PATH
PATH在运行时已解析为shell环境PATH。(已验证输出)。
shell形式指定用空格分隔的命令标记。 shell形式通过调用/ bin / sh -c执行命令(这意味着PID 1实际上是shell,而在docker文件中指定的命令只是另一个进程)(按CTRL + C不会杀死容器)
使用shell形式的优点是因为您正在使用/ bin / sh -c执行,所以我们可以在命令中解析环境变量(在上面的示例中,我们使用PATH)。
希望这会有所帮助
问候 苏达喀尔