docker nginx 端口 80 权限在 ubuntu 16 上被拒绝
docker nginx port 80 permission denied on 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
有谁知道怎么解决这个问题吗?
将我的评论保存为答案,以防有人无意中遇到这个问题。
TCP/IP 1024以下的端口号不能被非特权用户占用。您正在使用非特权版本的 NGINX,因此您无法绑定端口 80。这就是为什么此图像的默认端口是 8080 而不是 80 (readme link)。
如果您不是使用host
网络模式( docker run --net host
).
您可以将 CAP_NET_BIND_SERVICE 功能添加到 nginx,以便它可以绑定到保留端口:
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)。
我的主机在 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
有谁知道怎么解决这个问题吗?
将我的评论保存为答案,以防有人无意中遇到这个问题。
TCP/IP 1024以下的端口号不能被非特权用户占用。您正在使用非特权版本的 NGINX,因此您无法绑定端口 80。这就是为什么此图像的默认端口是 8080 而不是 80 (readme link)。
如果您不是使用host
网络模式( docker run --net host
).
您可以将 CAP_NET_BIND_SERVICE 功能添加到 nginx,以便它可以绑定到保留端口:
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)。