Как скопировать файл с хоста в контейнер с помощью Dockerfile
Я написал файл Docker, который выглядит как
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y wget
Теперь у меня есть файл с именем abc.txt
на моей главной машине. Как я могу скопировать его в этот контейнер. Есть ли какой-нибудь шаг, который я могу добавить в Dockerfile, который копирует из Host to Container.
Ответы
Ответ 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/
, но это немного некрасиво.
Ответ 3
вы можете использовать команду ADD https://docs.docker.com/engine/reference/builder/#/add или команду COPY https://docs.docker.com/engine/reference/builder/#/copy
Ответ 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