【问题标题】:Docker volume directories owned by root (not using Dockerfile)root 拥有的 Docker 卷目录(不使用 Dockerfile)
【发布时间】:2020-10-26 14:49:14
【问题描述】:

我正在通过 Payara Server (micro) 在 docker 容器中部署一个 java web 应用程序。

为了简化部署,我不打算通过 Dockerfile 使用自定义 Docker 映像,而只是通过 docker run 命令启动我的应用程序。

我目前正在使用 3 个不同的卷:

  • 一个用于将我的 .war 文件部署到自动部署文件夹 /opt/payara/deployments
  • 一个用于我的 Java 应用程序使用的配置文件 (.properties)
  • 用于收集日志的工具

问题是卷创建的文件夹都归根用户所有,因此 Payara 无法访问。

例如,configuration.properties 文件进入 /etc 文件夹,该文件夹在 payara/micro 映像中默认不存在,因此它由卷自动创建,但以 root 作为所有者而不是 Payara。

我想知道是否有无需创建特定 Dockerfile 即可解决此问题的方法。我已经构建了一个自定义映像,我在 Dockerfile 中使用 RUN 命令来创建这些目录,但这不是我想要在这里做的。

这是我当前使用的 docker run 命令:

docker run -dp 8080:8080 --name app -e KEY1="1" -e KEY2="2" -v $(pwd)/app.war:/opt/payara/deployments/app.war -v $(pwd)/configuration.properties:/opt/payara/etc/my-app/configuration.properties -v $(pwd)/logs:/opt/payara/var/my-app/api/log payara/micro

【问题讨论】:

    标签: docker payara


    【解决方案1】:

    提供 -u 参数以运行命令以以特定用户身份运行容器,在本例中为 root。但是,不建议以 root 身份运行容器。

    -u="", --user="": Sets the username or UID used and optionally the groupname or GID for the specified command.
    
    The followings examples are all valid:
    --user=[ user | user:group | uid | uid:gid | user:gid | uid:group ]
    

    Here 是 docker 文档链接。

    【讨论】:

    • 以 root 身份运行我的容器会弄乱它的主文件夹,这是我不想做的事情
    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 2018-10-23
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多