ДОБАВИТЬ или КОПИРОВАТЬ папку в Docker

My directory Структура следующим образом

 Dockerfile downloads

Я хочу добавить загрузки в /tmp

 ADD downloads /tmp/
 COPY down* /tmp
 ADD ./downloads /tmp

Работает Nothings. Он копирует содержимое загрузок в tmp. Я хочу скопировать загрузчик floder. Любая идея?

 ADD . tmp/

копирует файл Dockerfile. Я не хочу копировать Dockerfile в tmp/

Ответ 1

Я считаю, что вам нужно:

COPY downloads /tmp/downloads/

Это скопирует содержимое каталога загрузок в каталог с именем /tmp/downloads/.

Ответ 2

Примечание: сам каталог не копируется, только его содержимое

Из справки по dockerfile о COPY и ADD говорится Note: The directory itself is not copied, just its contents. , поэтому вы должны явно указать каталог dest.

RE: https://docs.docker.com/engine/reference/builder/#copy

например

Скопируйте содержимое каталога src каталог /some_dir/dest_dir.

COPY ./src    /some_dir/dest_dir/

Ответ 3

Сначала введите каталог, который вы хотите добавить как один файл архива:

tar -zcf download.tar.gz download

Затем добавьте файл архива в файл Docker:

ADD download.tar.gz tmp/

Ответ 4

Вы можете использовать:

RUN mkdir /path/to/your/new/folder/
COPY /host/folder/* /path/to/your/new/folder/

Я не мог найти способ сделать это напрямую только с одним вызовом COPY.

Ответ 5

Лучшим для меня было:

COPY . /tmp/

Со следующим файлом .dockerignore в корне

Dockerfile
.dockerignore
# Other files you don't want to copy

Это решение хорошо, если у вас есть много папок и файлов, которые вам нужны в контейнере, и не так много файлов, которые вам не нужны. В противном случае user2807690 'решение лучше.

Ответ 6

Если папка не заканчивается на /, она считается файлом, поэтому вы должны написать что-то вроде записи ADD /abc/ def/, если вы хотите скопировать папку.