簡體   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