Подтвердить что ты не робот

Как скопировать файл с хоста в контейнер с помощью Dockerfile

Я написал файл Docker, который выглядит как

FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y wget

Теперь у меня есть файл с именем abc.txt на моей главной машине. Как я могу скопировать его в этот контейнер. Есть ли какой-нибудь шаг, который я могу добавить в Dockerfile, который копирует из Host to Container.

4b9b3361

Ответ 1

Используйте команду COPY так:

COPY foo.txt /data/foo.txt
# where foo.txt is the relative path on host
# and /data/foo.txt is the absolute path in the image

Подробнее об COPY читайте в официальной документации

Альтернативой может быть использование ADD, но это не лучшая практика, если вы не хотите использовать некоторые расширенные функции ADD, такие как распаковка файлов tar.gz. Если вы все еще хотите использовать команду ADD, сделайте это следующим образом:

ADD abc.txt /data/abc.txt
# where abc.txt is the relative path on host
# and /data/abc.txt is the absolute path in the image

Подробнее об ADD читайте в официальной документации

Ответ 2

Для тех, кто получает эту (ужасно непонятную) ошибку:

Копирование не удалось: stat/var/lib/docker/tmp/docker-builderXXXXXXX/abc.txt: нет такого файла или каталога

Там может быть множество причин, в том числе:

  • Для пользователей docker-compose помните, что context docker-compose.yml перезаписывает контекст Dockerfile. Ваши операторы COPY теперь должны перемещаться по пути относительно того, что определено в docker-compose.yml, а не относительно вашего Dockerfile.
  • Конечные комментарии или точка с запятой в строке COPY abc.txt/app #This won't work: COPY abc.txt/app #This won't work
  • Файл находится в каталоге, игнорируемом .dockerignore или .gitignore (остерегайтесь подстановочных знаков)
  • Вы сделали опечатку

Иногда WORKDIR/abc сопровождается COPY. xyz/ COPY. xyz/ работает там, где не работает COPY/abc xyz/, но это немного некрасиво.

Ответ 4

Я столкнулся с этой проблемой, я не смог скопировать каталог zeppelin [1GB] в Docker-контейнер и получал проблему

Не удалось скопировать: stat/var/lib/docker/tmp/docker-builder977188321/zeppelin-0.7.2-bin-all: такого файла или каталога нет

Я использую версию Docker: 17.09.0-ce и решил проблему с помощью следующих шагов.

Шаг 1: скопировать каталог zeppelin [который я хочу скопировать в пакет Docker] в каталог, содержащий "Dockfile"

Шаг 2: отредактируйте Dockfile и добавьте команду [место, куда мы хотим скопировать] ADD./zeppelin-0.7.2-bin-all/usr/local/

Шаг 3: перейдите в каталог, содержащий DockFile, и выполните команду [также доступны альтернативы] Docker build

Шаг 4: Образ докера успешно создан с журналами

Шаг 5/9: ДОБАВИТЬ. /zeppelin-0.7.2-bin-all/usr/local / ---> 3691c902d9fe

Шаг 6/9: WORKDIR $ ZEPPELIN_HOME ---> 3adacfb024d8.... Успешно построено b67b9ea09f02