代码之家  ›  专栏  ›  技术社区  ›  Ming

docker和docker组成节点api:npm ERR!代码EACCES

  •  0
  • Ming  · 技术社区  · 4 年前

    你好,我有以下文件夹结构

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

    我的docker编写:

     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
    

    我的入口点.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! }
    

    以及:

    micro-hr | npm警告检查权限缺少写入权限 到/usr/src/api/node_modules/有符号micro-hr|npm 警告检查权限缺少对的写入权限 /usr/src/api/node_modules/highlight.js

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

    "postinstall": "npm link ../rabbitmq/",
    "postupdate": "npm link ../rabbitmq/",
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   Konrad Botor    4 年前

    我认为问题正在发展 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
    

    尝试删除或注释它,然后重建图像。