Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Docker映像中将端口80公开为用户节点_Node.js_Docker - Fatal编程技术网

Node.js 在Docker映像中将端口80公开为用户节点

Node.js 在Docker映像中将端口80公开为用户节点,node.js,docker,Node.js,Docker,我编写了一个NodeJS服务器,我正在尝试在一个基于节点的Docker容器中运行它 正如,我使用的是节点用户 我目前正在使用端口9999,它工作正常 我想公开端口80和443,但我似乎无法让它工作 快速修复方法是简单地使用root用户,但这似乎是一个黑客解决方案 主要问题是: 端口80和443是否可以由节点用户公开?如果是,怎么做 这也提出了一些额外的问题: 还是继续使用root用户更好 在Docker映像中公开端口80和443是个好主意吗 无论如何,这是我的Dockerfile: FR

我编写了一个NodeJS服务器,我正在尝试在一个基于节点的Docker容器中运行它

正如,我使用的是节点用户

我目前正在使用端口9999,它工作正常

我想公开端口80和443,但我似乎无法让它工作

快速修复方法是简单地使用root用户,但这似乎是一个黑客解决方案

主要问题是:

  • 端口80和443是否可以由节点用户公开?如果是,怎么做
这也提出了一些额外的问题:

  • 还是继续使用root用户更好
  • 在Docker映像中公开端口80和443是个好主意吗
无论如何,这是我的Dockerfile:

FROM node:10-alpine
ENV NODE_ENV production
WORKDIR /app
COPY api api
COPY packages/utils packages/utils
COPY package.json package.json
COPY yarn.lock yarn.lock
RUN npm uninstall --global npm \
 && apk add build-base python2 --no-cache \
 && yarn --frozen-lockfile --production \
 && rm -r /opt/yarn* yarn.lock
USER node
ENTRYPOINT ["node", "-r", "esm", "api/server.js"]
EXPOSE 9999

如果没有超级用户权限,您无法在端口号低于1024的端口上运行节点应用程序。同时以root用户身份运行节点是个坏主意。您应该使用反向代理,例如nginx…但是当您运行映像时,您可以选择主机上的任意端口来使用;例如,
docker run-p 80:9999
将在主机上的普通HTTP端口80上发布端口。我知道我可以将公开的端口映射到主机上的任意端口或使用nginx。我只是觉得在容器的默认端口上公开HTTP服务器是有意义的。从目前为止的评论来看,似乎我错了。