【问题标题】:Docker volume change owner to non-rootDocker 卷更改所有者为非 root
【发布时间】:2021-12-24 12:32:31
【问题描述】:

我想创建一个uploads 卷并将其所有者设置为node 用户。但是在运行容器时,我发现卷的所有者是root。这是我的 Docker 文件:

FROM node:12.21
RUN apt-get update && apt-get -y install curl vim bash nano

WORKDIR /home/node/app

COPY package.json .
COPY yarn.lock .

RUN mkdir ./uploads

RUN chown -R node:node .
USER node

RUN yarn install

COPY --chown=node:node . .

VOLUME /home/node/app/uploads

我使用docker-compose build 然后docker-compose up 来构建和运行;我的docker-compose.yml 还包含一个音量指令:

services:
  ...
  server:
    ...
    volumes:
      - ./uploads:/home/node/app/uploads

我的测试表明docker-compose.yml 中的这条指令是导致问题的原因——没有它,uploads 目录所有者被正确设置为node——但我不明白为什么。在这种情况下,docker-compose.yml 中的指令是多余的吗?如果我想将卷映射到本地目录(我相信这个指令是必要的),怎么样?

【问题讨论】:

    标签: docker docker-compose docker-volume


    【解决方案1】:

    绑定卷将保留主机上的原始所有权。您可以将主机上的目录模式更改为 77x,也可以试试这个way

    更新:根据您的反馈,您可以在 docker 启动脚本中添加 chmod

    【讨论】:

    • 创建容器后,我可以以 root 身份手动进入容器,chown 卷,将所有者设置为 node(这是永久修复)。鉴于可以设置正确的所有者,我希望有一些自动化的方式可以使用 Dockerfile 和/或 docker-compose.yml 来实现。将访问模式更改为 77x 或通过 sudo 进行所有访问似乎是不得已而为之。
    猜你喜欢
    • 2016-02-04
    • 2023-03-16
    • 2019-08-04
    • 2017-01-26
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多