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

时间:2019-05-23 14:20:41

标签: docker dockerfile

我有一个Dockerfile,该文件明确定义了上下文目录中的哪些导演和文件被复制到app目录中。但是无论如何,Docker都会尝试复制上下文目录中的所有文件。

Dockerfile位于上下文目录中。

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

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模式

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输出由于aqll thew错误消息而从我的终端窗口滚动出,因此我无法查看它是否通过COPY命令成功完成了。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

尝试通过以下方式复制文件-

            jest.mock('./Producer').updateOnTheFly( hello() { 
                    return {
                        message:'UPDATE ON FLY: hello',
                    }
            })
            test('simple test 1', () => {

                let consumer = new Consumer();
                consumer.call();
                expect(consumer.response.message).toEqual('UPDATE ON FLY: hello')
            });

此外,您还必须确保正确构建了docker-compose.yml文件-

 # set working directory
 WORKDIR /usr/src/app

 # add and install requirements
 COPY ./requirements.txt /usr/src/app/requirements.txt
 RUN pip install -r requirements.txt

 # add app
 COPY ./errorfiles /usr/src/app

在这里,我假设您的docker-compose.yml文件位于应用程序的父目录中。

查看是否可行。 :)