![](/img/trans.png)
[英]Docker + PHP:8.1.1-FPM how to install imagick php extension?
[英]Npm permission denied on docker php:8.1.1-fpm-alpine3.15
當我嘗試通過 docker-compose 啟動我的服務時,我收到以下錯誤消息:
服務前端 | npm 錯誤! 代碼 128
服務前端 | npm 錯誤! 發生未知的 git 錯誤
服務前端 | npm 錯誤! 命令 git --no-replace-objects clone -b feature/WHITELABEL-212-skeletons-während-der-lad https://bjoernme:***@bitbucket.org/faaren/faaren-ui.git /root/。 npm/_cacache/tmp/git-cloneBmjHnf --recurse-submodules --depth=1
服務前端 | npm 錯誤! 致命:無法創建'/root/.npm/_cacache/tmp/git-cloneBmjHnf'的前導目錄:權限被拒絕
服務前端 |
服務前端 | npm 錯誤! 可以在以下位置找到此運行的完整日志:
服務前端 | 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"
在深入研究這個問題后,我發現在 Node 16.15.1 中,npm 任務中的所有命令都以擁有當前工作目錄的用戶身份運行。 因此,即使將npm i
作為 root 子命令作為git clone
運行,也會以當前工作目錄所屬的用戶身份運行。
在我的例子中, /var/www/html/
屬於 user:group 33333:33333。 npm i
以 root 身份運行。 對於一些git clone
命令,這些命令是以用戶 33333 身份運行的。因此,不允許用戶 33333 訪問 /root/.npm 下的默認緩存 npm 文件夾,因為該文件夾屬於用戶 root。
我通過以下方式解決了問題:
mkdir /var/www/.npm/cache
之外創建一個緩存目錄chown -R 33333:33333 /var/www/.npm/cache
npm config set cache /var/www/.npm/cache --global
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.