Как мне ограничить, какие каталоги и файлы копируются Docker? - PullRequest
2 голосов
/ 23 мая 2019

У меня есть Dockerfile, который явно определяет, какие директоры и файлы из контекстного каталога копируются в каталог приложения.Но независимо от этого 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 ]

1 голос
/ 23 мая 2019

Все файлы в каталоге сборки и ниже находятся в начальном слое контекста сборки докера.
Попробуйте исключить файл .dockerignore для исключения файлов и каталогов из сборки.

0 голосов
/ 23 мая 2019

Попробуйте скопировать файлы следующим образом -

 # 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 правильно собран -

 version: "3.6"
 services:
      users:
           build:
                context: ./app
                dockerfile: Dockerfile
           volumes:
                - "./app:/usr/src/app"

Здесь я предполагаю, что ваш файл docker-compose.yml находится в родительском каталоге вашего приложения.

Проверьте, работает ли это.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...