如何解决docker nginx 端口 80 权限在 ubuntu 16
我的主机在 aws lightsail ubuntu 16 上。
一切都在我的本地机器上工作,但在 aws ubuntu 16 上。
我遇到了错误:nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
这是我用于 nginx 的 Dockerfile:
FROM nginxinc/nginx-unprivileged:1-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY ./uwsgi_params /etc/nginx/uwsgi_params
USER root
RUN mkdir -p /vol/static
RUN chmod 755 /vol/static
USER nginx
有人知道怎么解决这个问题吗?
解决方法
保存我的评论作为答案,以防有人也偶然发现这一点。
非特权用户无法使用低于 1024 的 TCP/IP 端口号。您使用的是非特权版本的 NGINX,因此无法绑定端口 80。这就是为什么此映像的默认端口为 8080 而不是 80 (readme link)。
如果您不使用host
网络模式 (docker run --net host
),您仍然应该能够将端口 80 用于此映像。
您可以向 nginx 添加 CAP_NET_BIND_SERVICE 功能,以便它可以绑定到保留端口:
setcap cap_net_bind_service=+ep /usr/local/nginx/sbin/nginx
然后端口 80 应该可以正常工作。您需要确保您的 nginx 是以不需要设置 LD_LIBRARY_PATH 的方式构建的,因为这会阻止它工作。如果您使用的是 LD_LIBRARY_PATH,请将您需要的路径添加到 /etc/ld.so.conf
或 /etc/ld.so.conf.d/nginx.conf
(并且不要忘记之后运行 ldconfig)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。