Как решить, отказано в разрешении при монтировании тома во время команды запуска Docker? - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь запустить контейнер, связывающий каталог, и получаю ошибку об отказе в разрешении, поэтому контейнер вообще не запускается.

В текущем каталоге есть каталог с именем main и в контейнере есть каталог /builder/project

david@localhost ~/contrib_archives $ docker run -v `realpath main`:/build/project builder
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/home/david/contrib_archives/main\\\" to rootfs \\\"/var/lib/docker/100000.100000/overlay2/2d14c3752819ff12891bace539ae4ef0039c42e6deb00170432c934d681b842e/merged\\\" at \\\"/build/project\\\" caused \\\"stat /home/david/contrib_archives/main: permission denied\\\"\"": unknown.
ERRO[0000] error waiting for container: context canceled 

Если я запускаю контейнер без параметра -v, он работает нормально (но это бесполезно, так как я не могу получить данные).

Кто-нибудь знает, в чем может быть проблема?

Я использую пространства имен пользователя.

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Проблема заключалась в том, что я работал с пространствами имен пользователей и не имел правильного сопоставления.

В моем дистрибутиве файл /etc/subuid содержит это:

david:100000:65536

Но мне пришлосьсделайте так, чтобы это выглядело так:

david:1000:1
david:100000:65536

Чтобы мой uid был сопоставлен с корневым каталогом внутри контейнера.

Кажется, что это хорошее руководство https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/

0 голосов
/ 29 октября 2019

Я столкнулся с подобной проблемой, и я дал один и тот же путь для цели и источника, просто для проверки, и это сработало.

Не могли бы вы попробовать следующее и посмотреть, может ли эточтобы запустить, не беспокойтесь о создании того же пути в контейнере, он будет создан сам по себе, просто запустите следующий раз, отредактируйте путь в качестве основной папки и дайте мне знать, если он вам подходит:

docker запустите -it -v / path / to / main /: / path / to / main builder

...