我已经创建了一个与主机用户相关联的php容器,这样我就不会对在docker容器中生成的文件产生任何问题(例如:当使用php artisan make:controller时)。
所以我有这个docker-compose.yml
version: '3.9'
services:
laravel-fpm:
user: 1000
container_name: laravel_app
restart: always
build:
context: .
dockerfile: ./docker/php-fpm/Dockerfile
volumes:
- ./src:/var/www/html这是Dockerfile
FROM php:8.0.2-fpm-alpine
WORKDIR /var/www/html
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install mysqli
RUN apk add icu-dev
# Installa nodejs per l'utilizzo delle dipendenze npm
RUN apk add --update npm
RUN npm install gulp-cli -g
RUN npm install
CMD ["php-fpm"]
EXPOSE 9000当我在容器docker-exec -it laravel_app sh中访问,然后运行npm install时,我得到:
您的缓存文件夹包含根拥有的文件,这是由于npm中的错误!以前版本的国家预防机制,后来得到了解决。npm错误!npm错误!若要永久解决此问题,请运行: npm!数独创-R 1000:0 "/.npm“npm错误!代码EACCES npm错误!系统呼叫npm错误!路径/.npm npm错误!13
这个问题与我在容器上指定的USER指令有关,有办法解决这个问题吗?
发布于 2022-04-11 17:06:44
问题
当以uid 1000的形式运行Docker容器时,容器中不存在该用户,因此默认路径(例如通常位于运行用户的主目录中的npm缓存)没有任何地方可供使用,因此默认为/。在构建过程中,您将充当root,因为没有USER指令。此外,构建中的npm install可能正在创建缓存目录,但是如果没有package.json,就没有什么可安装的了。
解决方案
在Dockerfile.
创建用户
如果您创建了这个用户,那么假设它总是同一个用户,但是由于您正在设置Docker中的用户,所以这可能不是最好的解决方案(如果您使用的是另一个用户呢?)如果您可以推理您将是哪个用户,那么使用Dockerfile中的用户指令,这可能是最好的选择。
更改npm缓存位置
您可以使用一个.npmrc文件,并设置cache=/some_dir,或者在命令行npm install --cache=/some_dir上对此进行更改。我建议您在根目录fs中创建一个合理的位置,类似于/npm,然后是cache=/npm/.npm。
在您的Dockerfile中,它应该如下所示:
# Set the NPM cache location
RUN mkdir /npm && chmod a+rwx /npm预创建目录
最简单的选择可能是预先创建具有打开权限的缓存目录。Dockerfile节录如下所示:
...
RUN apk add --update npm
RUN npm install gulp-cli -g
# You don't need this if you haven't got the
# application code in the build.
# RUN npm install
RUN mkdir /.npm && chmod a+rwx /.npm
...如果要跨容器持久保存此文件,则可以创建卷或将本地文件夹绑定到停靠器撰写文件中的容器中。
发布于 2022-04-11 17:23:37
最干净的方法是预先创建用户并配置npms路径前缀。
FROM php:8.0.2-fpm-alpine
# use the root user for the installation
USER root
# install and configure npm
RUN apk add --update --no-cache npm
RUN npm config -g set prefix /home/dev/.local/npm
# create the local user
ARG UID="1000" GID="1000"
RUN addgroup -g $GID "dev" && \
adduser -D -G "dev" -s /bin/sh -u $UID "dev"
# switch to the local user
USER dev
# add npms bin path to PATH
ENV PATH="$PATH:/home/dev/.local/npm/bin"
# install package as user
RUN npm install gulp-cli -g发布于 2022-04-07 19:42:08
正如错误消息所述,您可以运行以下命令以永久消除错误。
$ sudo chown -R 1000:0 "/.npm"注意:由于此命令是以sudo权限运行的,您可能必须提供一个管理密码。
还可以在Dockerfile中添加此命令,以避免手动运行它。
RUN sudo chown -R 1000:0 "/.npm"在npm install命令之前添加此命令。
https://stackoverflow.com/questions/71677880
复制相似问题