【问题标题】:PNPM docker non-root user Permission DeniedPNPM docker 非 root 用户权限被拒绝
【发布时间】:2022-01-08 06:43:02
【问题描述】:

我今天刚刚发现了 pnpm,它帮助解决了我的安装时 npm 超时的问题,这太棒了。 我在 docker 镜像中遇到了 pnpm 问题。

以前只有 npm 我有像这样的非特权用户

FROM node:14.17.3-slim

# build args
ARG NPM_AUTH_TOKEN
ARG HOME=/home/app
ARG NPMRC_PATH=$HOME/.npmrc

# setup unprivileged user
RUN useradd -Umrd $HOME app
WORKDIR $HOME
USER app

# copy configuration
COPY --chown=app:app "bin" "bin"
COPY --chown=app:app "package.json" "package-lock.json" "webpack.config.js" ".babelrc" ./

RUN ./bin/write_npmrc && \
    npm ci --production=false

ENV NODE_ENV=development
VOLUME ["$HOME/config", "$HOME/log", "$HOME/src"]
CMD ["npm", "start"]
EXPOSE 9000

但如果我切换到pnpn,由于权限被拒绝,我将无法继续构建映像,我需要使用 root 用户。

FROM node:14.17.3-slim

# build args
ARG NPM_AUTH_TOKEN
ARG HOME=/home/app
ARG NPMRC_PATH=$HOME/.npmrc

RUN apt-get update && apt-get install -y curl \
 && rm -rf /var/lib/apt/lists/*
RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm

WORKDIR $HOME

# copy configuration
COPY "bin" "bin"
COPY "package.json" "pnpm-lock.yaml" "webpack.config.js" ".babelrc" ./

RUN ./bin/write_npmrc && \
    pnpm install --frozen-lockfile

ENV NODE_ENV=development
VOLUME ["$HOME/config", "$HOME/log", "$HOME/src"]
CMD ["pnpm", "start"]
EXPOSE 9000

有没有办法让我保留

# setup unprivileged user
    RUN useradd -Umrd $HOME app
    WORKDIR $HOME
    USER app

用 pnpm 代替?

【问题讨论】:

    标签: javascript node.js docker npm pnpm


    【解决方案1】:

    您只需在安装系统包后更改为非特权用户即可。

    例子:

    FROM node:14.17.3-slim
    
    # build args
    ARG NPM_AUTH_TOKEN
    ARG HOME=/home/app
    ARG NPMRC_PATH=$HOME/.npmrc
    
    RUN apt-get update && apt-get install -y curl \
     && rm -rf /var/lib/apt/lists/*
    
    RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
    
    # setup unprivileged user
    RUN useradd -Umrd $HOME app && \
        chown -R app:app $HOME
    WORKDIR $HOME
    USER app
    
    # copy configuration
    COPY --chown=app:app "bin" "bin"
    COPY --chown=app:app "package.json" "pnpm-lock.yaml" "webpack.config.js" ".babelrc" ./
    
    RUN ./bin/write_npmrc && \
        pnpm install --frozen-lockfile
    
    ENV NODE_ENV=development
    VOLUME ["$HOME/config", "$HOME/log", "$HOME/src"]
    CMD ["pnpm", "start"]
    EXPOSE 9000
    

    【讨论】:

    • 我试过了,我得到了./bin/write_npmrc: line 25: /home/app/.npmrc: Permission denied
    • 你在切换到用户应用后尝试你的 curl 命令了吗?
    • 是的。根据我放置 RUN 命令的位置,我得到 -> List directory /var/lib/apt/lists/partial 丢失。 - Acquire (13: Permission denied) or ERROR  No write access to the found global executable directory
    • 我编辑了。立即尝试上述方法。
    • 天哪,它成功了!非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2020-05-12
    • 2019-02-05
    • 1970-01-01
    • 2023-03-22
    • 2017-03-27
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多