gpt4 book ai didi

docker - 如何让 dockerd 创建具有正确权限的绑定(bind)卷目录

转载 作者:行者123 更新时间:2023-12-02 21:19:22 25 4
gpt4 key购买 nike

当我使用以下命令运行 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com