设置USER后,无法连接到docker容器中的nodejs服务器

我有一个Dockerfile,以root身份运行时工作正常。 如果我添加一个非特权用户,它将运行:

docker ps (我改变了容器名称)

 f63a4ae42ba9 nonroot "sh /app/docker-st..." 16 minutes ago Up 16 minutes 0.0.0.0:3002->3002/tcp nonroot 4bd547b40246 root "sh /app/docker-st..." 3 hours ago Up 3 hours 0.0.0.0:3003->3002/tcp root 

但是我没有得到服务器响应。 看起来它可以连接。

 wget http://localhost:3002/stats --2017-07-20 14:40:27-- http://localhost:3002/stats Resolving localhost... ::1, 127.0.0.1 Connecting to localhost|::1|:3002... connected. HTTP request sent, awaiting response... No data received. Retrying. 

以root身份运行的容器工作正常:

 wget http://localhost:3003/stats --2017-07-20 14:40:31-- http://localhost:3003/stats Resolving localhost... ::1, 127.0.0.1 Connecting to localhost|::1|:3003... connected. HTTP request sent, awaiting response... 200 OK Length: 5866 (5.7K) [application/json] Saving to: 'stats.1 

这是我的Dockerfile:

 FROM node:6 WORKDIR /app RUN apt-get update && \ apt-get install -y \ libgconf2-4 libxss1 libxtst6 libnss3 libasound2 xvfb dbus-x11 libgtk2.0-common \ imagemagick ghostscript poppler-utils && \ rm -rf /var/lib/apt/lists/* ENV NODE_ENV="production" COPY ./package.json /app/ RUN npm install ENV \ ELECTRONEXPORT_HOST="0.0.0.0" \ ELECTRONEXPORT_PORT="3002" \ ELECTRONEXPORT_DATA="/data" \ ELECTRONEXPORT_LOGDIR="/var/log/spider_export" \ ELECTRONEXPORT_LOGSIZE="1" \ DEBUG="electronpdf*,pdf*" COPY docker-start.sh start.js /app/ COPY src/ /app/src RUN groupadd -r sbe && \ useradd --no-log-init -r -g sbe sbe && \ chown -R sbe:sbe /app && \ chmod -R 755 /app # Run as a non-privileged user USER sbe EXPOSE 3002 CMD ["sh", "/app/docker-start.sh"] 

这些是增加的线路,提出了这个问题:

 RUN groupadd -r sbe && \ useradd --no-log-init -r -g sbe sbe && \ chown -R sbe:sbe /app && \ chmod -R 755 /app # Run as a non-privileged user USER sbe 

编辑 :我在日志中发现这个错误

 A JavaScript error occurred in the main process Uncaught Exception: Error: Failed to get 'appData' path at Error (native) at Object.<anonymous> (/app/node_modules/electron/dist/resources/electron.asar/browser/init.js:149:39) at Module._compile (module.js:556:32) at Object.Module._extensions..js (module.js:565:10) at Module.load (module.js:473:32) at tryModuleLoad (module.js:432:12) at Function.Module._load (module.js:424:3) at Module.runMain (module.js:590:10) at run (bootstrap_node.js:402:7) at startup (bootstrap_node.js:157:9) 

我通过重新安排npm install来解决这个问题。 看来,电子把事情放在我chmod没有打的地方。

通过在npm安装之前更改用户,问题得到解决

 RUN groupadd -r sbe && \ useradd --no-log-init -m -r -g sbe sbe && \ chown -R sbe:sbe /app && \ chmod -R 755 /app # Run as a non-privileged user (inside the container) USER sbe ENV NODE_ENV="production" COPY ./package.json /app/ RUN npm install