当我使用以下命令运行 docker 容器时:
docker run -ti -v /tmp/michael:/opt/jboss/wildfly/standalone/log jboss
dockerd 使用所有者和组 = root 创建目录/tmp/michael。这当然会导致 jboss 在尝试写入其日志文件时出现权限被拒绝错误。
我必须手动创建/tmp/michael 并给出
chmod g+w
修复该问题的权限。 dockerd 然后以正确的权限重用现有的目录。这不是我想要的。有谁知道如何强制 dockerd 以正确的权限创建这些目录附加信息:
Dockerfile:
FROM jboss/wildfly
ADD entrypoint.sh /
ENTRYPOINT "/entrypoint.sh"
entrypoint.sh :(出于测试目的,只需触摸文件而不是启动 jboss)
#!/usr/bin/env bash
chown jboss:jboss /opt/jboss/wildfly/standalone/log
myfile=lala.`date +"%s"`
touch /opt/jboss/wildfly/standalone/log/${myfile}
但即使在这里,如果/tmp/michael 不存在并且没有组 +w 我确实收到权限被拒绝。我不知道如何摆脱它
最佳答案
你有两种可能:
chown
ENTRYPOINT 中的某处(为入口点制作 .sh)(从容器内部实现这一点)像
chown jboss:jboss /opt/jboss/wildfly/standalone/log
你不会有
jboss
用户或组,您需要直接使用de id。查看容器
/etc/passwd
并获取 jboss 用户 id ( docker exec jboss cat /etc/passwd
),记下 id 并制作 chown
在主机:chown 1001:1001 /tmp/michael
当然,最好的方法是 1。您可以为其使用 docker 卷等。最简单的方法是 2。
关于docker - 如何让 dockerd 创建具有正确权限的绑定(bind)卷目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47530156/