【问题标题】:docker and docker-compose node api: npm ERR! code EACCESdocker 和 docker-compose 节点 api:npm ERR!代码 EACCES
【发布时间】:2020-09-07 22:10:34
【问题描述】:

你好我有以下文件夹结构

main

|- .docker-compose.yml
|- backend/
   |- micro-hr/
      |-.dockerfile
   |- rabbitmq

我的码头工人撰写:

 micro-hr:
   build: 
     context: .
     dockerfile: backend/micro-hr/Dockerfile
  entrypoint: /usr/src/api/.docker/entrypoint.sh
  container_name: micro-hr
  environment:
    - CHOKIDAR_USEPOLLING=true
  ports:
  - 3001:3000

我的码头文件:

FROM node:lts-alpine
#create app directory
#xx
RUN mkdir /usr/src
RUN apk add --no-cache bash git
RUN touch /usr/src/.bashrc | echo "PS1='\w\$ '" >> /usr/src/.bashrc
#copy files
COPY backend/micro-hr/ormconfig.ts backend/micro-hr/.env backend/micro-hr/package.json backend/micro-hr/yarn.* /usr/src/api/
COPY backend/rabbitmq/package.json /usr/src/rabbitmq/
#install modules lib modules
RUN cd /usr/src/api/ && npm install
#copy other files
COPY backend/micro-hr/ /usr/src/api/
COPY backend/rabbitmq /usr/src/rabbitmq

RUN chown -R node:node /usr/src/api
RUN chown -R node:node /usr/src/rabbitmq
WORKDIR /usr/src/api

#set work dir
USER node

我的 entrypoint.sh:

#!/bin/bash

npm config set cache /usr/src/api/.npm-cache --global

cd /usr/src/api

npm install
npm run start:dev

我在 docker-compose up --build 上遇到了这个错误:

micro-hr              | > micro-hr@1.0.0 postinstall /usr/src/api
micro-hr              | > npm link ../rabbitmq/
micro-hr              | 
micro-hr              | npm ERR! code EACCES
micro-hr              | npm ERR! syscall symlink
micro-hr              | npm ERR! path /usr/src/rabbitmq
micro-hr              | npm ERR! dest /usr/local/lib/node_modules/rabbitmq
micro-hr              | npm ERR! errno -13
micro-hr              | npm ERR! Error: EACCES: permission denied, symlink '/usr/src/rabbitmq' -> '/usr/local/lib/node_modules/rabbitmq'
micro-hr              | npm ERR!  [Error: EACCES: permission denied, symlink '/usr/src/rabbitmq' -> '/usr/local/lib/node_modules/rabbitmq'] {
micro-hr              | npm ERR!   errno: -13,
micro-hr              | npm ERR!   code: 'EACCES',
micro-hr              | npm ERR!   syscall: 'symlink',
micro-hr              | npm ERR!   path: '/usr/src/rabbitmq',
micro-hr              | npm ERR!   dest: '/usr/local/lib/node_modules/rabbitmq'
micro-hr              | npm ERR! }

和:

微小时 | npm WARN checkPermissions 缺少写权限 到 /usr/src/api/node_modules/has-symbols 微小时 | npm WARN checkPermissions 缺少对 /usr/src/api/node_modules/highlight.js

我知道这是权限问题,但我不知道如何解决。 问题是在安装我的 npm 链接模块时:

"postinstall": "npm link ../rabbitmq/",
"postupdate": "npm link ../rabbitmq/",

【问题讨论】:

  • 您的npm run start:dev 脚​​本是否尝试创建/usr/local/etc
  • 是这样的:"start:dev":"ts-node-dev --inspect --respawn --transpile-only --ignore-watch node_modules -r tsconfig-paths/register src/index .ts",
  • @Narigo 我编辑问题

标签: docker docker-compose


【解决方案1】:

我认为问题在于以 root 身份运行 npm install

试试

USER node
RUN cd /usr/src/api/ && npm install
#copy other files
COPY --chown node:node backend/micro-hr/ /usr/src/api/
COPY --chown node:node backend/rabbitmq /usr/src/rabbitmq
WORKDIR /usr/src/api

而不是

RUN cd /usr/src/api/ && npm install
#copy other files
COPY backend/micro-hr/ /usr/src/api/
COPY backend/rabbitmq /usr/src/rabbitmq

RUN chown -R node:node /usr/src/api
RUN chown -R node:node /usr/src/rabbitmq
WORKDIR /usr/src/api

#set work dir
USER node

基于this article,我将之前的建议修改为:

USER node
RUN mkdir ~/.npm-global && npm config set prefix '~/.npm-global' && \
    export PATH=~/.npm-global/bin:$PATH && \
    cd /usr/src/api/ && npm install
#copy other files
ENV PATH="~/.npm-global/bin:${PATH}"
COPY --chown node:node backend/micro-hr/ /usr/src/api/
COPY --chown node:node backend/rabbitmq /usr/src/rabbitmq
WORKDIR /usr/src/api

编辑:

我认为entrypoint.sh 中的这一行可能会导致新问题:

npm config set cache /usr/src/api/.npm-cache --global

尝试删除或注释掉它并重建图像。

【讨论】:

  • 因此我在运行 npm install 时出错:> npm link ../rabbitmq/ npm ERR!代码 EACCES npm 错误!系统调用符号链接 npm ERR!路径 /usr/src/rabbitmq npm 错误! dest /usr/local/lib/node_modules/rabbitmq
  • 也许我是从我的主包安装的,但我的 rabbitmq 没有权限
  • 据我所知,我的服务器在 src / api 上运行正常,但不允许安装在我的 rabbitmq 模块上
  • npm 错误!错误:EACCES:权限被拒绝,符号链接 '/usr/src/rabbitmq' -> '/usr/local/lib/node_modules/rabbitmq' micro-hr | npm 错误! [错误:EACCES:权限被拒绝,符号链接 '/usr/src/rabbitmq' -> '/usr/local/lib/node_modules/rabbitmq'] { micro-hr | npm 错误!错误号:-13,微小时 | npm 错误!代码:'EACCES',微小时 | npm 错误!系统调用:'符号链接',微小时 | npm 错误!路径:'/usr/src/rabbitmq',微小时 | npm 错误! dest: '/usr/local/lib/node_modules/rabbitmq' 微小时 | npm 错误! }
  • 我试过了,它似乎工作正常,直到我去我的入口点并再次调用 npm install 然后我有权限错误
猜你喜欢
  • 2020-05-16
  • 2017-03-06
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 2021-01-07
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多