2016-07-26 3 views
1

Можно ли установить том из файла Docker? если нет, то лучший способ сделать это?Могу ли я установить том из файла Docker?

Я знаю, что вы можете сделать это с помощью обычных команд Docker в командной строке, но есть ли лучший способ сделать это?

+0

Вы можете установить том из файла Dockerfile, вы просто не можете указать местоположение - поэтому оно может быть или не быть полезным в зависимости от ваших потребностей. Причина в том, что сборка должна быть независимой от хоста. Как уже упоминалось, вы можете копировать файлы во время сборки, но если вы хотите читать/писать, вам может понадобиться другое решение. Вы можете использовать API, чтобы получить местоположение динамически созданного тома, но я не уверен, что это будет лучше, чем указать его на 'run'. Если у вас есть какой-то уникальный вариант использования, более подробная информация поможет. – ldg

+0

Кажется, что [rocker] (https://github.com/grammarly/rocker) может оказаться полезным в этом случае. – Opal

ответ

1

К сожалению, это не это можно сделать во время сборки изображения.

Я думаю, что причиной может быть переносимость? Я не совсем уверен здесь - будет хорошо, если кто-нибудь сможет это объяснить дальше.

Но я предполагаю, что если Docker позволит пользователям монтировать тома на сборке, то Docker должен будет предвидеть и обрабатывать различные типы файловых систем, например Windows vs Unix. Также, если путь к каталогу, который предполагается использовать для установки, не существует на другом хосте?

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

См:
https://docs.docker.com/engine/reference/builder/#/add

Q: Так что это лучший подход?
A: Я думаю, что нет стандартного подхода для установки объема. Обычно я устанавливаю мой монтаж в файле docker-compose.

См:
https://docs.docker.com/compose/compose-file/#/volumes-volume-driver

+0

спасибо за это, плюс у меня есть еще один вопрос: как смонтировать текущую папку в качестве тома, например, я хочу сделать что-то вроде этого: docker run -i -t -v :/usr/TmpVolume ubuntu/bin/bash – user3547774

+0

@ user3547774 Я могу попробовать использовать команду '\' pwd \ '' для запуска выражения для получения текущего рабочего каталога.Пример: 'docker run -i -t -v \' pwd \ ':/usr/TmpVolume ubuntu/bin/bash' Рад помочь, дайте мне знать, если это сработает для вас –

+0

Я пробовал это, не работал. что делает 'pwd'? Он создал том внутри контейнера, но содержимое, доступное в системе хоста, отсутствовало. – user3547774

1

В контексте Dockerfile, Вы имеете ограниченный доступ для размещения ресурсов, в той степени, что нужно на самом деле построить изображение контейнера. Чтобы проиллюстрировать, должны ли вы монтировать тома хоста, запускать контейнеры или получать доступ к их ресурсам, что, вероятно, будет соответствовать изображению, которое может быть создано для вас только в вашей текущей среде.

Если вам действительно нужны ресурсы хоста, установленные в качестве тома в течение всего времени сборки, вы можете посмотреть в Packr. Однако, если вы хотите, чтобы том был доступен при запуске контейнера, обычно обычно нужно использовать docker run --name=Foo $ARGS.

Смежные вопросы