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

标签 docker wildfly

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

    相关文章:

    cluster-computing - 野蝇 9 : JGRP000012: discarded message from different cluster hq-cluster (our cluster is ee)

    jenkins - 让 Jenkins 在没有 sudo 的情况下运行 docker

    java - Wildfly/Hibernate 查询结果无法返回持久化实体

    java - NoClassDefFound错误: org/apache/commons/io/output/DeferredFileOutputStream in uploading file with SpringMVC/Wildfly/CentOS

    docker - Jenkinsfile未使用完整的docker-compose命令,丢失了build-arg

    java - 将特定领域的对象传递给 jBPM 6 工作台中的特定领域任务

    jakarta-ee - WildFly - HornetQ 连接超时和性能问题

    docker - Pod "mysql"被禁止 : no API token found for service account default/default

    docker - 无法在 Linux 上使用 ElasticSearch 映射 logstash

    docker - Kubernetes-未知的入场插件:DefaultStorageClass