我正在运行 Dockerfile有两个 COPY 语句:
WORKDIR /app
COPY requirements.txt entrypoint.sh ./
COPY binaries/ ./binaries
它工作正常,我最终得到了我需要的东西:
root:/# ls /app
requirements.txt
entrypoint.sh
binaries/
├── executable1
├── executable2
└── executable3
但我希望层数尽可能少,因此我尝试将两个 COPY 语句合并为一个:
WORKDIR /app
COPY requirements.txt entrypoint.sh binaries/ ./
但是这是从 binaries/
文件夹中“提取”所有文件并将它们放在其他 2 个文件旁边:
root:/# ls /app
requirements.txt
entrypoint.sh
executable1
executable2
executable3
问题
如何将一些文件和一个(或多个)特定文件夹合并到 Dockerfile 中的一个唯一的 COPY 语句中(当然如果可能的话) ?
环境信息:
Docker version 20.10.0, build 7287ab3
Host: ubuntu 18.04.5
测试 MWE
来自本地主机:~$
mkdir -p doc && cd doc && mkdir -p binaries && touch entrypoint.sh \
requirements.txt binaries/ex1 binaries/ex2 binaries/ex3 \
&& echo 'FROM debian:buster-slim
WORKDIR /app
COPY requirements.txt entrypoint.sh binaries ./' >> Dockerfile
来自本地主机:~$
docker build --no-cache -t test:latest . \
&& docker run -it --rm --name test test:latest bash
从容器内部:
root:/app# ls
给我:
entrypoint.sh ex1 ex2 ex3 requirements.txt
使用ADD
而不是COPY
时会遇到相同的行为。
最佳答案
您可以在 Dockerfile 旁边创建一个具有以下结构的文件夹,然后将内容复制到您的应用程序目录中,
$ tree
.
├── Dockerfile
└── folder
├── binaries
│ ├── executable1
│ ├── executable2
│ └── executable3
├── entrypoint.sh
└── requirements.txt
2 directories, 6 files
Dockerfile,
FROM debian:buster-slim
WORKDIR /app
COPY folder .
root@b111e73a17c1:/app# tree
.
|-- binaries
| |-- executable1
| |-- executable2
| `-- executable3
|-- entrypoint.sh
`-- requirements.txt
1 directory, 5 files
关于docker - 使用 Dockerfile 中的唯一 COPY 语句将一些文件和整个文件夹从主机复制到容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65400017/