首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户应该拥有什么样的权限来公开一个码头容器端口?

问用户应该拥有什么样的权限来公开一个码头容器端口?
EN

Stack Overflow用户
提问于 2019-04-07 12:32:46
回答 1查看 1.4K关注 0票数 1

我要在码头集装箱上装木偶。试着按照他们的故障排除页面https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md#running-on-alpine来做。

但是,在创建和使用新用户(Pptruser)之后,服务器无法公开端口80,因为用户没有Error: listen EACCES 0.0.0.0:80权限。

找不到关于我应该添加给这个用户的权限的清晰文档,这样用户就可以公开$PORT

尝试将用户添加到sudo中,但这不起作用,但另一方面,即使这样做有效,我也认为这是一个错误,因为这是一种安全风险。

尝试在开始使用新用户之前公开端口,但也失败了。

Dockerfile

代码语言:javascript
复制
FROM node

# Installs latest Chromium (72) package.
RUN apk update && apk upgrade && \
    echo @edge http://nl.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
    echo @edge http://nl.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories && \
    apk add --no-cache \
      chromium@edge \
      nss@edge \
      freetype@edge \
      harfbuzz@edge \
      ttf-freefont@edge \
      udev

RUN mkdir -p /app
WORKDIR /app

# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true

# Add user so we don't need --no-sandbox.
RUN addgroup -S pptruser && adduser -S -g pptruser pptruser \
    && mkdir -p /home/pptruser/Downloads \
    && chown -R pptruser:pptruser /home/pptruser \
    && chown -R pptruser:pptruser /app


ENV PORT 80
ENV HTTP_PORT $PORT
ENV HTTPS_PORT 443

EXPOSE $HTTP_PORT
EXPOSE $HTTPS_PORT

USER pptruser


CMD [ "run.sh" ]

run.sh

代码语言:javascript
复制
#!/bin/sh

PORT="${HTTP_PORT:-80}"

node "app/bin/server.js"

日志错误

代码语言:javascript
复制
 Error: listen EACCES 0.0.0.0:80
at Object.exports._errnoException (util.js:1020:11)
at exports._exceptionWithHostPort (util.js:1043:20)
at Server._listen2 (net.js:1258:19)
at listen (net.js:1307:10)
at Server.listen (net.js:1403:5)
at appServer.app.then.then.then (/app/bin/server.js:69:12)

感谢你的任何帮助

EN

回答 1

Stack Overflow用户

发布于 2019-04-07 12:55:44

传统上,只有root用户可以绑定1024以下的端口。但是,我认为您会发现这对于您的特定用例并不重要。服务在容器中侦听的端口与远程客户端连接到它的端口没有任何关系。“暴露在主机上的端口”到“侦听容器内的端口”的映射是通过Docker的港口出版机制控制的。

对于您的示例,您可以将您的服务配置为侦听端口80...for以外的其他内容--这个示例的目的是,假设您将其配置为侦听端口8080。

运行容器时,将主机上的端口80映射到容器内的端口8080:

代码语言:javascript
复制
docker run -p 80:8080 ...

现在,您可以在主机上访问端口80的服务。您可以以同样的方式处理端口443。

还要注意,您的Dockerfile中的EXPOSE关键字在很大程度上是不必要的。在典型的Docker环境中,这是一个非操作且只具有信息性的环境。无论是否为EXPOSEd,都可以发布端口。

1这种情况实际上是Linux下的稍微细微一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55559049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档