Apabila saya cuba memulakan perkhidmatan saya melalui docker-compose, saya mendapat mesej ralat berikut:
service_frontend |. Kod 128
service_frontend |. Ralat git yang tidak diketahui berlaku
service_frontend |. Perintah 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 |. MAUT: Tidak dapat mencipta direktori petunjuk untuk '/root/.npm/_cacache/tmp/git-cloneBmjHnf': Kebenaran ditolak
Perkhidmatan bahagian hadapan|
service_frontend |. Log penuh larian ini boleh didapati di:
service_frontend |. /root/.npm/_logs/2022-06-24T13_42_41_376Z-debug.log
service_frontend keluar dengan kod 128
Saya mencuba berbilang buruj sebagai sifat pengguna dalam docker-compose.yml, bermula dengan root, root:root, node:node, 1000:1000, UID:GID (pembolehubah ditetapkan untuk menyuntik ID pengguna dan ID kumpulan tempatan saya.
Bahagian yang berkaitan dari docker-compose.yml saya:
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
Ini ialah imej buruh pelabuhan tempatan saya:
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 ;
Ini ialah imej asas dalaman kami (berdasarkan php:8.1.1-fpm-alpine3.15 Imej:
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"
Selepas menggali isu ini, saya mendapati bahawa dalam Node 16.15.1, semua arahan dalam tugas npm dijalankan sebagai pengguna yang memiliki direktori kerja semasa. Jadi walaupun semasa menjalankan sebagai root subperintah
npm i
时,git clone
akan dijalankan sebagai pengguna yang dimiliki oleh direktori kerja semasa.Dalam kes saya,
/var/www/html/
属于 user:group 33333:33333。npm i
berjalan sebagai root. Untuk beberapa arahan klon git, arahan ini dijalankan sebagai pengguna 33333. Oleh itu, pengguna 33333 tidak dibenarkan mengakses folder npm cache lalai di bawah /root/.npm kerana folder tersebut adalah milik root pengguna.Saya menyelesaikan masalah dengan:
mkdir /var/www/.npm/cache
chown -R 33333:33333 /var/www/.npm/cache
npm config set cache /var/www/.npm/cache --global