Невозможно напрямую выполнить скрипт на томе докера - PullRequest
0 голосов
/ 06 февраля 2019

Среда:

Docker version 18.06.1-ce, build e68fc7a
Description:    Ubuntu 18.04.1 LTS
Storage Driver: overlay2

Aforementioned volume: 
        {
            "Type": "volume",
            "Name": "xxx",
            "Source": "/var/lib/docker/volumes/xxx/_data",
            "Destination": "/tmp",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        },

Когда я пытаюсь создать сценарий в этом каталоге (пытаюсь повторить проблему с еще-другим-docker-плагином): touch init.sh && chmod +x init.sh && ./init.sh Я получаю ошибку «Отказано в доступе».

Похоже, что флаги установлены правильно с помощью chmod: -rwxr-xr-x 1 root root

Сценарии можно запускать в любом другом каталоге, но не на томах.

Что наиболее интересно, запуск скрипта с помощью команды bash init.sh работает!

В чем может быть причина такого странного поведения и как его исправить?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Немного поигрался, чтобы попытаться повторить.

Эта серия команд сработала.

docker volume create mine
docker run -it -v mine:/tmp ubuntu bash
touch init.sh && chmod +x init.sh && ./init.sh

Проверка полученной громкости -

        {
            "Type": "volume",
            "Name": "mine",
            "Source": "/var/lib/docker/volumes/mine/_data",
            "Destination": "/tmp",
            "Driver": "local",
            "Mode": "z",
            "RW": true,
            "Propagation": ""
        }

Разницаэто «Режим», который я считаю «z», потому что я не запускаю selinux.

Я пробовал несколько разных вариантов, чтобы дублировать вашу проблему

docker run -it --mount type=volume,source=mine,target=/tmp,readonly ubuntu bash -c "cd /tmp && touch init.sh && chmod +x init.sh && ./init.sh"
touch: cannot touch 'init.sh': Read-only file system

Но я не смог.Просматривая некоторые ссылки, я нашел эту проблему, которая ссылается на статью https://github.com/moby/moby/issues/7054 https://lwn.net/Articles/281157/

В статье говорится, что bind mounts наследуют параметры монтирования (например, noexec) от mount.Итак ... ваша папка Docker на монтируется с помощью noexec?

0 голосов
/ 06 февраля 2019

Полагаю, это потому, что POSIX /tmp не позволяет вам выполнить скрипт.Вы можете убедиться в этом, введя getfacl init.sh.

Используя chmod +x init.sh, вы только добавляете разрешение на выполнение для всех пользователей к существующим разрешениям.

Используя chmod 755 init.sh, вы устанавливаете полные разрешения для владельца, а также права на чтение и выполнение для других.

Я верю, что должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...