it-roy-ru.com

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

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

FROM ubuntu:12.04

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

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

38
Sasikiran Vaddi

Используйте команду 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 читайте в официальной документации

58
george.yord

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

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

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

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

Иногда WORKDIR /abc, за которым следует COPY . xyz/, работает, когда COPY /abc xyz/ терпит неудачу, но это немного уродливо.

3
Overleaf

вы можете использовать либо команду ADD https://docs.docker.com/engine/reference/builder/#/add , либо команду COPY https://docs.docker.com/engine/reference/ строитель/#/копия

2
user2915097

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

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

Я использую версию 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

1
Rajeev Rathor