我有一个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命令成功完成了。
答案 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文件位于应用程序的父目录中。
查看是否可行。 :)