为什么这个文件被复制到 Docker 镜像的根目录而不是工作目录

时间:2021-07-28 00:11:23

标签: docker dockerfile docker-copy

使用以下 Dockerfile

FROM alpine:latest

WORKDIR /usr/src/app

COPY ["somefile", "/"]

build 以下命令:

docker build \
--file=Dockerfile \
--no-cache=true \
--progress=plain \
--tag=someimage:sometag \
.

=>

#1 [internal] load build definition from Dockerfile
. . .
#8 naming to docker.io/someimage:sometag done
#8 DONE 0.0s

为什么在根 (somefile) 中找到 /

docker run someimage:sometag ls -altr ../../../.

#=>

total 68
. . .
-rw-r--r--    1 root     root           128 Jul 27 12:34 somefile
. . .
drwxr-xr-x    1 root     root          4096 Jul 27 12:34 ..
drwxr-xr-x    1 root     root          4096 Jul 27 12:34 .

而不是工作目录 (/usr/src/app):

docker run someimage:sometag ls -altr .

#=>

total 8
drwxr-xr-x    3 root     root          4096 Jul 27 12:34 ..
drwxr-xr-x    2 root     root          4096 Jul 27 12:34 .

1 个答案:

答案 0 :(得分:0)

COPY 中的 Dockerfile 指令:

. . .
COPY ["somefile", "/"]
. . .

使用绝对路径而不是相对路径;有关 here 的更多信息。

/ 替换 ./ 会将 COPY somefile 改为 /usr/src/app 而不是根目录:

FROM alpine:latest

WORKDIR /usr/src/app

COPY ["somefile", "./"]

我们可以在 somefile 图像后找到 build

docker run someimage:anothertag ls -altr .

#=>

total 16
-rw-r--r--    1 root     root           128 Jul 27 23:45 somefile
drwxr-xr-x    1 root     root          4096 Jul 27 23:45 ..
drwxr-xr-x    1 root     root          4096 Jul 27 23:45 .