Вы используете Dockerfile, или вам нужно настроить громкость с помощью отдельного процесса. Именованный том будет инициализирован с содержимым изображения, включая файлы, каталоги, владельцев и разрешения. Это происходит, когда том пустой или отсутствует.
Таким образом, ваши параметры включают в себя:
- обновить изображение, чтобы включить желаемое владение этим каталогом. Обратите внимание, если изображение определяет это как том, ваше изменение должно предшествовать этому определению.
- заранее создать том с желаемым владельцем и смонтировать его в контейнере
- изменить точку входа контейнера чтобы запустить как root, исправьте права доступа, а затем переключитесь на нужного пользователя (используя что-то вроде gosu)
Развернув второй вариант, вы можете создать том с желаемым владение и контент, запустив временный контейнер для выполнения задачи:
docker container run --rm -v bar-data:/data busybox /bin/sh -c \
"touch /data/.initialized && chown -R ${UID}:${GID} /data"
Затем в файле compose вы можете объявить этот том как внешний:
version: "3.6"
services:
foo:
user: "${UID}:${GID}"
image: node:latest
container_name: foo
working_dir: /var/www/foo
volumes:
- bar:/var/www/foo/bar
volumes:
bar:
# tell compose this volume is externally created with a different name
external: true
name: bar-data
Это создаст том с один файл, необходимый для предотвращения повторной инициализации docker пустого тома из содержимого изображения. Это также означает, что вам нужно загрузить любые данные в том, так как он будет пустым. Обычный метод копирования данных в том включает использование tar:
tar -cC source_dir . | \
docker run --rm -i -v foo-data:/target busybox tar -xC /target