首頁  >  問答  >  主體

Docker PHP:8.1.1-fpm-alpine3.15中出現Npm權限被拒絕的問題

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

service_frontend | npm 錯誤!代碼128

service_frontend | npm 錯誤!發生未知的 git 錯誤

service_frontend | npm 錯誤!指令 git --no-replace-objects clone -b feature/WHITELABEL-212-sculpts-während-der-lad https://bjoernme:***@bitbucket.org/faaren/faaren-ui.git /root/。 npm/_cacache/tmp/git-cloneBmjHnf --recurse-submodules --深度=1

service_frontend | npm 錯誤!致命:無法建立「/root/.npm/_cacache/tmp/git-cloneBmjHnf」的前導目錄:權限被拒絕

服務前端|

service_frontend | npm 錯誤!可以在以下位置找到此運行的完整日誌:

service_frontend | 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"


#
P粉904191507P粉904191507267 天前370

全部回覆(1)我來回復

  • P粉709307865

    P粉7093078652024-01-01 15:20:55

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

    就我而言,/var/www/html/ 屬於 user:group 33333:33333。 npm i 以 root 身分運行。對於一些 git clone 指令,這些指令是以使用者 33333 的身分執行的。因此,不允許使用者 33333 存取 /root/.npm 下的預設快取 npm 資料夾,因為該資料夾屬於使用者 root。 < /p>

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

    • 在根目錄之外建立一個快取目錄mkdir /var/www/.npm/cache
    • 將所有權改為 333333:chown -R 33333:33333 /var/www/.npm/cache
    • 將新目錄設定為 npm 快取目錄:npm config set cache /var/www/.npm/cache --global

    回覆
    0
  • 取消回覆