环境:
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-plugin复制问题)时:touch init.sh && chmod +x init.sh && ./init.sh
,我遇到“权限被拒绝”失败。
标记似乎已由chmod正确设置:-rwxr-xr-x 1 root root
脚本可以在任何其他目录中启动,但不能在卷上启动。
最有趣的是,使用命令bash init.sh
启动脚本即可!
这种奇怪行为的原因可能是什么?如何解决?
答案 0 :(得分:1)
正在努力尝试并复制。
这一系列命令有效。
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/
文章说,绑定装载从装载继承装载选项(例如noexec)。那么...您的docker文件夹是否位于通过noexec挂载的挂载上?
答案 1 :(得分:0)
我想是因为/tmp
的POSIX不允许您执行脚本。
您可以通过发出getfacl init.sh
来验证。
使用chmod +x init.sh
,仅将所有用户的执行权限添加到现有权限中。
通过使用chmod 755 init.sh
,您可以设置所有者的完整权限以及其他用户的读取和执行权限。
我认为应该可以解决问题。