docker - 如何限制 Docker 复制哪些目录和文件?

标签 docker dockerfile

我有一个 Dockerfile,它明确定义将上下文目录中的哪些目录和文件复制到应用程序目录。但无论如何,Docker 都会尝试复制上下文目录中的所有文件。

Dockerfile 位于上下文目录中。

我的测试代码和数据文件位于上下文目录正下方的目录中。它尝试复制上下文目录中的所有内容,而不仅仅是复制命令指定的目录和文件。因此,除了指定每个目录和子目录中的每个文件之外,我收到了数百条以下错误消息:

ERRO[0043] Can't add file /home/david/gitlab/etl/testdata/test_s3_fetched.csv to tar: archive/tar: missed writing 12029507 bytes
...
ERRO[0043] Can't close tar writer: archive/tar: missed writing 12029507 bytes 
Sending build context to Docker daemon  1.164GB
Error response from daemon: Error processing tar file(exit status 1): unexpected EOF

我对引用的理解是,如果没有 ADD 或 COPY 指令,它只会复制所有文件和目录。

我尝试过以下复制模式

COPY ./name/ /app/name
COPY name/ /app/name
COPY name /app/name

WORKDIR /app
COPY ./name/ /name

WORKDIR /app
COPY name/ /name

WORKDIR /app
COPY name /name

我的 Dockerfile:

FROM python3.7.3-alpine3.9

RUN apk update && apk upgrade && apk add bash
# Copy app
WORKDIR /app
COPY app /app
COPY configfiles /configfiles
COPY logs /logs/
COPY errorfiles /errorfiles
COPY shell /shell
COPY ./*.py .

WORKDIR ../
COPY requirements.txt /tmp/

RUN pip install -U pip && pip install -U sphinx && pip install -r /tmp/requirements.txt

EXPOSE 22 80 8887

我希望它只复制我的文件,而不会出现与尝试复制我未在 COPY 命令中指定的文件相关的错误。由于 Docker 输出由于 aqllw 错误消息而从我的终端窗口滚出,因此我无法查看 COPY 命令是否成功。

最佳答案

构建目录及其下的所有文件都将复制到 docker 构建上下文的初始层。
考虑使用 .dockerignore file从构建中排除文件和目录。

关于docker - 如何限制 Docker 复制哪些目录和文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56277316/

相关文章:

docker - 如何在 gitlab-ci docker 执行器中在 AMD 上使用 OpenCL 运行程序

postgresql - 从另一个容器访问 Docker postgres 容器

docker - 无法在当前目录或具有完整路径的目录中添加文件

java - Docker无法在Java和mysql容器之间建立连接

docker - 如何在构建时在Docker容器卷中添加文件

docker - 在单台机器上自动部署dockerized应用程序

c - 在docker容器中获取主机IP

postgresql - flask 无法将 postgresql 与 docker-compose 连接

linux - Dockerfile 中的 RUN 命令有什么作用?

docker - 不会覆盖Docker容器上的环境变量