Docker PHP : un problème d'autorisation Npm refusée se produit dans 8.1.1-fpm-alpine3.15
P粉904191507
P粉904191507 2023-12-31 22:51:38
0
1
438

Lorsque j'essaie de démarrer mon service via docker-compose, j'obtiens le message d'erreur suivant :

service_frontend | erreur npm ! Code 128

service_frontend | erreur npm ! Une erreur git inconnue s'est produite

service_frontend | erreur npm ! Commande 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 --profondeur=1

service_frontend | erreur npm ! FATAL : Impossible de créer le répertoire principal pour '/root/.npm/_cacache/tmp/git-cloneBmjHnf' : autorisation refusée

Service frontal|

service_frontend | erreur npm ! Le journal complet de cette course peut être trouvé sur :

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

service_frontend est sorti avec le code 128

J'ai essayé plusieurs constellations en tant que propriétés utilisateur dans docker-compose.yml, en commençant par root, root:root, node:node, 1000:1000, UID:GID (les variables sont définies pour injecter mon identifiant d'utilisateur local et mon identifiant de groupe.

La partie pertinente de mon 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

Voici mon image Docker locale :

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 ;

Il s'agit de notre image de base interne (basée sur php:8.1.1-fpm-alpine3.15 Image :

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粉904191507
P粉904191507

répondre à tous(1)
P粉709307865

Après avoir étudié le problème, j'ai découvert que dans le nœud 16.15.1, toutes les commandes des tâches npm sont exécutées en tant qu'utilisateur propriétaire du répertoire de travail actuel. Ainsi, même lorsqu'elle est exécutée en tant que root, la sous-commande npm i 时,git clone s'exécutera en tant qu'utilisateur auquel appartient le répertoire de travail actuel.

Dans mon cas, /var/www/html/ 属于 user:group 33333:33333。 npm i fonctionnait en tant que root. Pour certaines commandes git clone, ces commandes sont exécutées en tant qu'utilisateur 33333. Par conséquent, l'utilisateur 33333 n'est pas autorisé à accéder au dossier npm mis en cache par défaut sous /root/.npm car ce dossier appartient à l'utilisateur root.

J'ai résolu le problème en :

  • Créez un répertoire de cache en dehors du répertoire racinemkdir /var/www/.npm/cache
  • Changer de propriétaire en 333333 : chown -R 33333:33333 /var/www/.npm/cache
  • Définissez le nouveau répertoire comme répertoire de cache npm : npm config set cache /var/www/.npm/cache --global
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal