【问题标题】:Docker - Unable to use placeholders inside ENTRYPOINTDocker - 无法在 ENTRYPOINT 中使用占位符
【发布时间】:2016-05-20 07:33:20
【问题描述】:

我有这个 Dockerfile:

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

我通过必要的 build-arg 构建 docker 映像:docker build -t co/myprogram --build-arg=HOST=myhost.com .

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

有没有办法在 ENTRYPOINT 中使用占位符?

【问题讨论】:

    标签: java docker dockerfile


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-06-02
        • 2015-04-01
        • 2018-02-23
        • 2018-06-10
        • 2020-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-15
        相关资源
        最近更新 更多