在Docker中以非root用户身份运行节点应用程序

几天之后,我一直在尝试使用docker-compose作为Docker容器内的非root用户运行节点应用程序。 无论我尝试什么,我都会得到相同的EACCES: permission denied错误,更具体地说,它似乎是启动脚本的一个问题:

 Error: EACCES: permission denied, open '/home/dev/learn-node/public/dist/App.bundle.js' npm info lifecycle dang-thats-delicious@0.0.0~assets: Failed to exec assets script 

当我简单地注释掉Dockerfile中的USER dev行并保持为root时,我没有看到任何这些问题。 我已经尝试了许多不同的命令在我的Dockerfile中,但切换到dev用户似乎导致的问题。

这就是我的package.json脚本部分的样子

 "scripts": { "prod": "node ./start.js", "watch": "nodemon ./start.js --ignore public/", "start": "concurrently \"npm run watch\" \"npm run assets\" --names \"💻,📦\" --prefix name", "assets": "webpack -w --display-max-modules 0", "sample": "node ./data/load-sample-data.js", "blowitallaway": "node ./data/load-sample-data.js --delete", "now": "now -e DB_USER=@db_user -e DB_PASS=@db_pass -e NODE_ENV=\"production\" -e PORT=80" }, 

我认为我没有理解关于权限的一些基本原则的首要问题。 为了安全,我想成为非root 。 请指教。

Dockerfile:

 FROM node RUN apt-get update && apt-get -y install curl \ apt-utils \ locales \ nano \ python && \ useradd --user-group --create-home --shell /bin/false dev && \ sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ locale-gen # Set the locale # RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ # locale-gen ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 ENV HOME=/home/dev WORKDIR $HOME/learn-node COPY package.json $HOME/learn-node/ RUN chown -R dev:dev $HOME//* # npm has read write issues when switching to dev user RUN npm install RUN chown -R dev:dev /home/dev/.config USER dev CMD ["npm", "start"]