簡體   English   中英

docker php:8.1.1-fpm-alpine3.15 上的 Npm 權限被拒絕

[英]Npm permission denied on docker php:8.1.1-fpm-alpine3.15

當我嘗試通過 docker-compose 啟動我的服務時,我收到以下錯誤消息:

服務前端 | npm 錯誤! 代碼 128

服務前端 | npm 錯誤! 發生未知的 git 錯誤

服務前端 | npm 錯誤! 命令 git --no-replace-objects clone -b feature/WHITELABEL-212-skeletons-während-der-lad https://bjoernme:***@bitbucket.org/faaren/faaren-ui.git /root/。 npm/_cacache/tmp/git-cloneBmjHnf --recurse-submodules --depth=1

服務前端 | npm 錯誤! 致命:無法創建'/root/.npm/_cacache/tmp/git-cloneBmjHnf'的前導目錄:權限被拒絕

服務前端 |

服務前端 | npm 錯誤! 可以在以下位置找到此運行的完整日志:

服務前端 | npm 錯誤! /root/.npm/_logs/2022-06-24T13_42_41_376Z-debug.log

service_frontend 以代碼 128 退出

我在我的 docker-compose.yml 中為用戶屬性嘗試了多個星座,從 root、root:root、node:node、1000:1000、UID:GID 開始(變量設置為注入我的本地用戶 ID 和組 ID .

我的 docker-compose.yml 中的相關部分:

  service_frontend:
    build:
      context: /workspace/faaren-services/frontend
      dockerfile: Dockerfile
      args:
        dev: "true"
    command: bash -c "npm install --save-dev chokidar@3.5.2 && composer install && php artisan octane:start --server=swoole --host=0.0.0.0 --port=8080 --watch"
    user: root
    volumes:
      - /workspace/faaren-services/frontend:/var/www/html
      - ./docker-conf/supervisor/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
      - ./docker-conf/php/debugger.ini:/usr/local/etc/php/conf.d/debugger.ini

這是我的本地 docker 鏡像:

FROM eu.gcr.io/faaren-prod/frontend-base-image:latest
COPY . /var/www/html
ARG dev=false
RUN if [ ${dev} = "true" ] ; then \
        set -ex \
        && apk add --no-cache npm \
        && mkdir -p /.npm \
        && mkdir -p /root/.npm/_cacache/tmp/ \
        && chmod 777 -R "/root/.npm/_cacache/tmp/" \
        && chmod 777 -R "/.npm" \
    fi ;

這是我們的內部基礎鏡像(基於php:8.1.1-fpm-alpine3.15 鏡像

FROM php:8.1.1-fpm-alpine3.15
WORKDIR /var/www/html/

RUN apk add --no-cache --update git \
    npm 

RUN mkdir /.npm
RUN mkdir /.cache
RUN chown -R 1000:1001 "/.npm"
RUN chown -R 1000:1001 "/.cache"

在深入研究這個問題后,我發現在 Node 16.15.1 中,npm 任務中的所有命令都以擁有當前工作目錄的用戶身份運行。 因此,即使將npm i作為 root 子命令作為git clone運行,也會以當前工作目錄所屬的用戶身份運行。

在我的例子中, /var/www/html/屬於 user:group 33333:33333。 npm i以 root 身份運行。 對於一些git clone命令,這些命令是以用戶 33333 身份運行的。因此,不允許用戶 33333 訪問 /root/.npm 下的默認緩存 npm 文件夾,因為該文件夾屬於用戶 root。

我通過以下方式解決了問題:

  • 在根mkdir /var/www/.npm/cache之外創建一個緩存目錄
  • 將所有權更改為 333333: chown -R 33333:33333 /var/www/.npm/cache
  • 將新目錄設置為 npm 緩存目錄: npm config set cache /var/www/.npm/cache --global

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM