docker - 使用 Dockerfile 中的唯一 COPY 语句将一些文件和整个文件夹从主机复制到容器中?

标签 docker dockerfile

我正在运行 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/

相关文章:

docker - 如何在 Docker 中将 VOLUME 更改为 COPY?

linux - 状态错误 : no such file or directory while building Docker from a custom image with Docker build command

docker - Hyperledger Composer-Docker集群

python - 使用 docker-compose up 运行时如何优雅地停止 Dockerized Python ROS2 节点?

docker - 我可以在不下载图像的情况下获得图像摘要吗?

docker - 如何通过 Puppeteer 访问用于 dockerized Chromium 启动的远程调试页面?

mysql - 如何从我的主机连接到在 docker 容器中运行的 mysql 服务器?

python - 将 virtualenv 转移到 docker 镜像

python - 从 ubuntu 基础镜像和 python 基础镜像构建 docker 的区别?

python - Docker:没有这样的选项:--use-wheel