Немного поигрался, чтобы попытаться повторить.
Эта серия команд сработала.
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?