我有这个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?
答案 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