我应该如何在Docker的Entrypoint中使用环境变量?

时间:2018-12-04 02:38:22

标签: docker

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中使用环境变量和参数

1 个答案:

答案 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)。

希望这会有所帮助

问候 苏达喀尔

相关问题