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"
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 :
mkdir /var/www/.npm/cache
chown -R 33333:33333 /var/www/.npm/cache
npm config set cache /var/www/.npm/cache --global