Я хочу добавить привязку к файлу докера так же, как я инициализирую том внутри Dockefile. Есть ли способ для этого?
Добавьте монтирование привязки к Dockerfile так же, как том
Ответы (3)
Dockerfile определяет, как создается образ, а не как он используется, поэтому вы не можете указать монтирование привязки в Dockerfile. Вместо этого попробуйте использовать docker-compose. Простой docker-compose.yml
, который монтирует для вас каталог, будет выглядеть так:
version: '3.1'
services:
mycontainer:
image: myimage
build: .
volumes:
- './path/on/docker/host:/path/inside/container'
build: .
является необязательным, если вы создаете образ каким-то другим способом, но иногда бывает удобно сделать все сразу.
Запустите это с помощью docker-compose up -d
-d
не требуется
- person poige; 01.06.2020
В дополнение к тому, что говорят другие ответы:
Поскольку монтирование с привязкой обеспечивает доступ к файловой системе хоста, разрешение их встраивания в образ было бы огромным риском для безопасности. Рассмотрим образ, который претендует на роль, скажем, веб-сервера, но на самом деле bind монтирует ваши /etc/passwd
и /etc/shadow
, а затем отправляет их на удаленный сервер.
Или тот, который связывает монтирование /lib/ld-linux.so
, а затем перезаписывает его, тем самым ломая всю вашу систему.
По этим причинам вы не можете встроить монтирование привязки в свой Dockerfile. Точно так же вы не можете указать сопоставления портов хоста, доступ к хост-устройству или любые другие подобные атрибуты в Dockerfile.
Простой ответ - нет.
Основной принцип дизайна образов докеров — переносимость. Связное монтирование зависит от хоста, поскольку смонтированная папка определяется на хост-компьютере. Таким образом, это противоречит требованию переносимости образов Docker.