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