所以我在3个不同的Docker主机上部署了一个tomcat应用程序容器(相同的docker compose / dockerfile)。所有这些主机共享安装在/ var / opt / data / flat / APP / files上的SAN逻辑卷。我的容器需要能够读取或写入此SAN。但是只有我的第一个docker容器能够毫无问题地完成它。我的3个实例之间可能有什么不同,它使第一个工作,而不是另外三个工作。我可能在我的第一台主机而不是其他主机上有所改变?直到今天,我还无法弄清楚是什么。
Docker撰写提取物:
volumes:
- /var/opt/data/flat/APP/log:/var/opt/data/flat/APP/log:Z
- /var/opt/data/flat/APP/files:/var/opt/data/flat/APP/files
从3台主机,权限是相同的,我没有遇到读/写问题:
[app]$ ls -al /var/opt/data/flat/APP
drwxrwxrwx. 3 app app 1024 Apr 9 16:05 conf
drwxrwxrwx. 6 app app 4096 Apr 10 13:45 files
drwxrwxrwx. 2 app app 4096 Mar 29 14:09 log
drwxrwxrwx. 2 app app 1024 Mar 18 11:48 scripts
从3个容器:
root@38033790df5d:/var/opt/data/flat/APP# ls -al /var/opt/data/flat/APP
total 8
drwxr-xr-x. 4 root root 30 Apr 9 15:12 .
drwxr-xr-x. 3 root root 17 Apr 9 15:12 ..
drwxrwxrwx. 6 nobody nogroup 4096 Apr 10 11:45 files
drwxrwxrwx. 2 nobody nogroup 4096 Mar 29 13:09 log
我在容器#2和容器#3上遇到错误:
root@9c8027865360:/var/opt/data/flat/APP# ls files
ls: cannot open directory 'files': Permission denied
但是,我的所有容器似乎都能够在日志文件夹中写入日志而没有任何问题。
3台主机上/etc/docker/daemon.json的内容:
{"userns-remap": "default"}
解决了,SELinux在第一个VM上设置为允许,并在其他VM上强制执行。所以我完全禁用它在每个主机上。
我相应地更新了我的撰写文件:
volumes:
- /var/opt/data/flat/APP/log:/var/opt/data/flat/APP/log:Z
- /var/opt/data/flat/APP/files:/var/opt/data/flat/APP/files:z