[英]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.