Скопируйте файл хоста в Docker-контейнер во время сборки - PullRequest
0 голосов
/ 26 марта 2019

Есть ли способ скопировать файл хоста в Docker-контейнер во время процесса сборки, т.е. Docker build -t.

Например, добавить эту строку не удалось:

COPY /home/my_name/file_I_want /root

Поскольку docker пытается скопировать из пути / var / lib / docker / tmp / docker-xxxxx.

Какая польза от команды COPY, которая должна копировать с хоста в контейнер, если она не может даже получить доступ к структуре каталогов хоста должным образом?

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Команда COPY не копирует из хоста в контейнер, она копирует из контекста сборки в новый слой изображения. Как видите, разница между ними очень большая.

Команда build, как и другие команды docker, основана на клиент / сервер. Сборка может выполняться на удаленном сервере без доступа к компьютеру, на котором выполняется команда docker. Чтобы поддержать копирование файлов в изображение, вы передаете контекст сборки в качестве последнего аргумента команде сборки. Этот контекст часто . указывает на текущий каталог. Это может быть любой каталог. Вы можете дополнительно изменить то, что включено в этот контекст, с помощью файла .dockerignore. Самый первый шаг сборки на стороне клиента заключается в том, чтобы сконфигурировать контекст и отправить его на сервер, который распакован во временное местоположение. Чтобы избежать бесконечных циклов (отправка временного каталога на сервер, распакованный в подкаталог этого временного каталога, повторение до тех пор, пока не закончится место на диске) и медленных сборок в целом, вы должны минимизировать этот контекст, отправляя только необходимый каталог создать приложение.

Разница между изображением и контейнером здесь немного менее важна. Контейнер - это экземпляр, который часто выполняется с изолированным процессом внутри, на основе определения из изображения При копировании файлов в изображение не требуется создавать временный контейнер, как обычно при использовании команды RUN. Конечным результатом всех этих команд в Dockerfile является новый образ, который вы затем можете запускать как один или несколько контейнеров или выдвигать / извлекать из реестров.

Решение состоит в том, чтобы сделать первый каталог в вашей команде копирования частью контекста сборки, обычно это тот же каталог, что и ваш файл Docker, и скопировать из этого относительного пути.

0 голосов
/ 26 марта 2019

COPY - скопировать файл с хоста в образ докера.

Не копировать в «корневую» папку, к которой у него нет доступа. Вам нужно добавить команду для разрешения записи, если вы используете корневую или системную папку.

Попробуйте перейти в папку "tmp" и посмотрите. «tmp» имеет разрешение на запись.

COPY / home / my_name / file_I_want / tmp

Вы можете создать папку, также вам нужно предоставить доступ.

Что касается пути, да, я тоже сталкиваюсь с тем же. Это относительный путь.

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