Docker обеспечивает инициализацию источника тома для содержимого вашего изображения в определенном сценарии:
- Это должен быть именованный том, а не хост-том (отображающий путь в контейнер)
- Источник тома должен быть пустым, если в каталоге есть данные, они не будут изменены докером
- Только при создании контейнера (во время работы контейнера он не будет повторно инициализировать папку)
- Параметр отключения копии не установлен (это параметр «nocopy» в файле композиции).
В настоящее время вы застряли на первом требовании, но можно сопоставить любую папку с хоста в контейнер, используя именованный том, который выполняет подключение. Вот несколько примеров трех разных способов сделать это:
# create the volume in advance
$ docker volume create --driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
# create on the fly with --mount
$ docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
foo
# inside a docker-compose file
...
volumes:
bind-test:
driver: local
driver_opts:
type: none
o: bind
device: /home/user/test
...
Ваш пример будет выглядеть примерно так:
version: '3.2'
services:
resources:
image: <private_registry>/resources:latest
volumes:
- resources:/resources
volumes:
resources:
driver: local
driver_opts:
type: none
o: bind
device: /full/path/to/resources
Обратите внимание, что этот каталог должен существовать на хосте заранее. Без него подключение не будет выполнено, и, в отличие от хост-подключения, докер не создаст его для вас.