Docker - 无法在ENTRYPOINT中使用占位符

时间:2016-05-20 07:33:20

标签: java docker dockerfile

我有这个Dockerfile:

FROM java:8
ARG HOST
...
...
ENTRYPOINT java -DHOST=${HOST} -jar ./app.jar

我构建了docker镜像,传递了必要的build-arg:docker build -t co/myprogram --build-arg=HOST=myhost.com .

然而,当我运行图像时:docker run co/myprogram我的程序中出现异常,因为占位符没有替换HOST值。该网址看起来像http:///action/get而不是http://myhost.com/action/get ..

有没有办法在ENTRYPOINT中使用placehoders?

2 个答案:

答案 0 :(得分:3)

ARG不用于插入ENTRYPOINT。 要实现您想要的目标,您可以添加ENV HOST $HOST行。 然后,入口点将在运行时使用$ HOST,而不是构建时的内插值,但是,变量将使用在构建时设置的默认值进行设置,但仍然可以覆盖。

以下是一个例子:

$ cat Dockerfile 
FROM busybox
ARG what
ENV what $what
RUN echo ${what} > /tmp/${what}
ENTRYPOINT cat /tmp/${what}

$ docker run -ti $(docker build -q --build-arg=what=test . ) 
test

答案 1 :(得分:1)

不幸的是,设计似乎不可能:https://github.com/docker/docker/issues/18492