Ответ 1
Докер не расширяет ~ или $ HOME. Вам, вероятно, нужно явно ссылаться на файл или упаковать его относительно самого файла Docker.
Все, я пытаюсь постоянно копировать файлы с моего хоста на изображение, чтобы эти файлы были доступны с каждым контейнером, запущенным на основе этого изображения. Работает на debian wheezy 64bit как виртуальный бокс.
Dockerfile довольно прост (установка октавного изображения):
FROM debian:jessie
MAINTAINER GG_Python <[redacted]@gmail.com>
RUN apt-get update
RUN apt-get update
RUN apt-get install -y octave octave-image octave-missing-functions octave-nan octave-statistics
RUN mkdir /octave
RUN mkdir /octave/libs
RUN mkdir /octave/libs/jsonlab
COPY ~/octave/jsonlab/loadjson.m /octave/libs/jsonlab/.
После получения команды docker build -t octave.
я получаю следующий след: docker build -t octave.
Sending build context to Docker daemon 423.9 kB
Sending build context to Docker daemon
Step 0 : FROM debian:jessie
---> 58052b122b60
Step 1 : MAINTAINER GG_Python <[..]@gmail.com>
---> Using cache
---> 90d2dd2f7ee8
Step 2 : RUN apt-get update
---> Using cache
---> 4c72c25cd829
Step 3 : RUN apt-get update
---> Using cache
---> b52f0bcb9f86
Step 4 : RUN apt-get install -y octave octave-image octave-missing-functions octave-nan octave-statistics
---> Using cache
---> f0637ab96d5e
Step 5 : RUN mkdir /octave
---> Using cache
---> a2d278b2819b
Step 6 : RUN mkdir /octave/libs
---> Using cache
---> 65efbbe01c99
Step 7 : RUN mkdir /octave/libs/jsonlab
---> Using cache
---> e41b80901266
Step 8 : COPY ~/octave/jsonlab/loadjson.m /octave/libs/jsonlab/.
INFO[0000] ~/octave/jsonlab/loadjson.m: no such file or directory
Docker категорически отказывается копировать этот файл с хоста в изображение. Излишне говорить, что файл loadjson.m есть (отображение cat), все мои попытки изменить путь (относительный, абсолютный и т.д.) Не удались. Любые советы, почему эта простая задача проблематична?
Докер не расширяет ~ или $ HOME. Вам, вероятно, нужно явно ссылаться на файл или упаковать его относительно самого файла Docker.
Docker может копировать только файлы из контекста, папка, в которой вы находитесь, за исключением любого файла, указанного в файле докеры.
Когда вы запускаете докеры-сборщики док-станции, контекст и отправляет его демонам-докерам, к которым вы подключены. Он позволяет копировать файлы внутри контекста, потому что демон может быть удаленной машиной.
Я не мог заставить COPY работать, пока не понял контекст (я пытался скопировать файл из контекста)
Команда docker build создает изображение из файла Docker и контекста. Контекст builds - это файлы в определенном месте PATH. PATH - это каталог вашей локальной файловой системы.
Контекст обрабатывается рекурсивно. Таким образом, PATH включает любые подкаталоги.
Сборка выполняется демоном Docker, а не CLI. Первое, что делает процесс сборки, - это отправить весь контекст (рекурсивно) на демон. В большинстве случаев лучше всего начинать с пустой директории в качестве контекста и хранить файл Docker в этом каталоге. Добавьте только файлы, необходимые для создания файла Docker.
Предупреждение. Не используйте корневой каталог /, как PATH, поскольку он заставляет сборку передать все содержимое вашего жесткого диска демону Docker.
Ссылка: https://docs.docker.com/engine/reference/builder/#usage