繁体   English   中英

如何使用Nginx容器proxy_pass到端口80上的节点docker容器

[英]How to proxy_pass to a node docker container on port 80 with nginx container

简而言之,我正在尝试将nginx容器设置为proxy_pass到端口80上的其他容器。

我一直在跟随本教程: https : //dev.to/domysee/setting-up-a-reverse-proxy-with-nginx-and-docker-compose-29jg

他们描述了一个docker compose文件,看起来像:

version: '3'
services:
  nginx: 
    image: nginx:latest
    container_name: production_nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/error.log:/etc/nginx/error_log.log
      - ./nginx/cache/:/etc/nginx/cache
      - /etc/letsencrypt/:/etc/letsencrypt/
    ports:
      - 80:80
      - 443:443

  your_app_1:
    image: your_app_1_image:latest
    container_name: your_app_1
    expose:
      - "80"

  your_app_2:
    image: your_app_2_image:latest
    container_name: your_app_2
    expose:
      - "80"

  your_app_3:
    image: your_app_3_image:latest
    container_name: your_app_3
    expose:
      - "80"

然后在nginx配置中,他们根据如下路径执行proxy_pass:

proxy_pass http://your_app_1:80;

这一切对我来说都是有意义的,但是,当我使测试节点服务器在端口80上侦听时,出现错误:错误:侦听EACCES:权限被拒绝0.0.0.0:80。 在节点服务器的Dockerfile中,我使用了另一个用户:

USER node

我知道我收到此错误,因为非root用户不应该能够在端口1024或以下端口进行绑定。 而且我知道以root身份在容器中运行是一种不好的做法……那么,在世界上这种可能性怎么可能? 我觉得我在这里想念什么。 不必每次在nginx中执行proxy_pass时都记得服务器正在运行的一些自定义高端口,那将是一件很高兴的事情,或者这仅仅是事实而已?

只要不发布端口,我发现在端口上进行公开操作会出现零问题。

EXPOSE不允许通过定义的端口与同一网络外部的容器或主机进行通信。 为此,您需要发布端口。

但是它可以通过在Docker客户端或Docker-Compose cap_add上使用--add-cap标志授予内核功能来增加安全漏洞的代价来cap_add NET_BIND_SERVICE是我们应该添加的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM