Docker: COPY 是否支持可变目的地?
Docker: does COPY support variable destinations?
是否可以在 Dockerfile 的 COPY
中指定变量 dest-dir?
例如鉴于此 Dockerfile:
ARG dest_dir=/foo/bar/
FROM alpine:3.7 as base
COPY ./ ${dest_dir}
...docker build
似乎无法识别变量目标:
$ docker build .
[+] Building 0.3s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 118B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/alpine:3.7 0.0s
=> CACHED [1/2] FROM docker.io/library/alpine:3.7 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 106B 0.0s
=> [2/2] COPY ./ 0.1s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:e761939bd6a8092e51e37b08d3b4ca196d310d5e36d232252313cdddd68adace 0.0s
上面要注意的是,在步骤 2/2 中,COPY
没有第二个参数。
我试过双引号 ARG
值,它在 COPY
语句中的使用,两者都无济于事。
当 ARG
出现在 FROM
语句之前时,它仅适用于执行它的 FROM 语句。如果您希望 ARG
语句应用于文件的其余部分,it must appear after the FROM statement.
像这样:
FROM alpine:3.7 as base
ARG dest_dir=/foo/bar/
COPY ./ ${dest_dir}
是否可以在 Dockerfile 的 COPY
中指定变量 dest-dir?
例如鉴于此 Dockerfile:
ARG dest_dir=/foo/bar/
FROM alpine:3.7 as base
COPY ./ ${dest_dir}
...docker build
似乎无法识别变量目标:
$ docker build .
[+] Building 0.3s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 118B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/alpine:3.7 0.0s
=> CACHED [1/2] FROM docker.io/library/alpine:3.7 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 106B 0.0s
=> [2/2] COPY ./ 0.1s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:e761939bd6a8092e51e37b08d3b4ca196d310d5e36d232252313cdddd68adace 0.0s
上面要注意的是,在步骤 2/2 中,COPY
没有第二个参数。
我试过双引号 ARG
值,它在 COPY
语句中的使用,两者都无济于事。
当 ARG
出现在 FROM
语句之前时,它仅适用于执行它的 FROM 语句。如果您希望 ARG
语句应用于文件的其余部分,it must appear after the FROM statement.
像这样:
FROM alpine:3.7 as base
ARG dest_dir=/foo/bar/
COPY ./ ${dest_dir}