设置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
- 从Docker Windows容器远程debugging.Net Core控制台应用程序时,Visual Studio 2017不加载debugging符号
- 当名称为空时如何确定docker容器的重启策略?
- 在使用Docker时,ESTABLISHED连接不会出现在netstat中
- Nginx代理服务器返回错误的IP地址
- 具有外部数据容器的Docker postgresql容器
- 当使用PhpStorm运行时,stream_socket_client容器之间的超时
- 试图在Docker中运行Cloudera镜像
- Docker需要访问主机的Postgres数据库
- 尝试在composer php中运行php内置服务器时,获取“php_network_getaddresses:getaddrinfo失败:名称或服务未知”
- 如何在Google Compute Engine(GCE)内核上获得AUFS内核模块?
- Docker s6-overlay在SIGTERM上延迟closures