Heim  >  Fragen und Antworten  >  Hauptteil

Docker PHP: Das Problem „Npm-Berechtigung verweigert“ tritt in 8.1.1-fpm-alpine3.15 auf

Wenn ich versuche, meinen Dienst über Docker-Compose zu starten, erhalte ich die folgende Fehlermeldung:

service_frontend |. npm-Fehler! Code 128

service_frontend |. npm-Fehler! Es ist ein unbekannter Git-Fehler aufgetreten

service_frontend |. npm-Fehler! Befehl 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 -- Depth=1

service_frontend |. npm-Fehler! FATAL: Lead-Verzeichnis für „/root/.npm/_cacache/tmp/git-cloneBmjHnf“ kann nicht erstellt werden: Berechtigung verweigert

Service-Frontend|

service_frontend |. npm-Fehler! Das vollständige Protokoll dieses Laufs finden Sie unter:

service_frontend |. npm-Fehler! /root/.npm/_logs/2022-06-24T13_42_41_376Z-debug.log

service_frontend wurde mit Code 128 beendet

Ich habe mehrere Konstellationen als Benutzereigenschaften in docker-compose.yml ausprobiert, beginnend mit root, root:root, node:node, 1000:1000, UID:GID (die Variablen sind so eingestellt, dass sie meine lokale Benutzer-ID und Gruppen-ID einfügen .

Der relevante Teil aus meiner 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

Dies ist mein lokales Docker-Image:

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 ;

Dies ist unser internes Basisbild (basierend auf php:8.1.1-fpm-alpine3.15 Bild:

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 Tage vor376

Antworte allen(1)Ich werde antworten

  • 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

    Antwort
    0
  • StornierenAntwort