我有一些我用docker-compose运行的项目。该项目的前端在端口4200,后端3000和数据库5342上。当我使用docker-compose运行它时,所有这些端口都是公共的。这样,我(每个人都可以)访问后端https://myserver:3000/api。
如何禁用docker-proxy端口公开?我的解决方案是我有nginx,用作myapp.myserver.com并重定向到本地前端端口4200(nginx.conf)-前端正在使用后端端口3000和后端5432-但这些端口不应是公共的。公共端口只能是80、443、22(ssh)等。
查看我的netstat:
tcp 0 0 0.0.0.0:80 0.0.0.0:* NASLOUCHÁ 11972/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* NASLOUCHÁ 848/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* NASLOUCHÁ 1149/master
tcp 0 0 0.0.0.0:443 0.0.0.0:* NASLOUCHÁ 11972/nginx: master
tcp6 0 0 :::9000 :::* NASLOUCHÁ 16995/docker-proxy
tcp6 0 0 :::5000 :::* NASLOUCHÁ 14069/docker-proxy
tcp6 0 0 :::5001 :::* NASLOUCHÁ 11557/docker-proxy
tcp6 0 0 :::8080 :::* NASLOUCHÁ 11402/docker-proxy
tcp6 0 0 :::80 :::* NASLOUCHÁ 11972/nginx: master
tcp6 0 0 :::22 :::* NASLOUCHÁ 848/sshd
tcp6 0 0 ::1:25 :::* NASLOUCHÁ 1149/master
tcp6 0 0 :::443 :::* NASLOUCHÁ 11972/nginx: master
tcp6 0 0 :::8000 :::* NASLOUCHÁ 17006/docker-proxy
答案 0 :(得分:0)
您也可以使用nginx.conf重定向到后端端口。例如,api.myserver.com
会将流量路由到后端端口3000,db.myserver.com
会将流量路由到端口3000。所有这些容器都应该位于同一docker network上,以便于路由。
Nginx可以控制哪些端口暴露于外界。
这样,您的nginx将作为ingress proxy服务器。所有连接均通过nginx路由,而世界其他地方则忽略了内部使用的端口。这个想法是用来向全世界开放kubernetes背后的服务的。
答案 1 :(得分:0)
因此我在映射端口时通过更改来解决它:
发件人:
ports:
- "3000:3000"
收件人:
ports:
- "127.0.0.1:3000:3000"
现在,它仅在运行应用程序的VPS本地主机上可用,无法调用https://myserverip.com:3000/api。