docker - docker compose nginx 和 tomcat,只在互联网上公开 nginx
问题描述
我正在使用 Docker 撰写文件来创建 nginx 和 tomcat 容器。nginx 将用作反向代理,因此它可以访问 tomcat。我能够使用 azure 容器实例通过 2 个单独的容器成功地做到这一点。你点击了 nginx 的 URL,然后你被重定向到 tomcat securley,因为 nginx 有 HTTPS 和证书。直到一切正常。但问题是,如果您通过 http yo 单独访问 tomcat Ip 也可以访问容器,这是不安全的。我只希望 nginx 可以访问那个 tomcat。如何做到这一点?我现在尝试使用 docker compose,我知道容器将使用相同的网络并且可以相互连接,但是我怎样才能实现 nginx 连接到 Tomcat 并且只能通过 nginx 通过 https 的重定向来访问 tomcat 并且无法通过 http 单独访问 tomcat 。这是我拥有的 YML,但我不知道如何管理端口以实现我想要的。这可能吗?
version: '3.1'
services:
tomcat:
build:
context: ./tomcat
dockerfile: Dockerfile
container_name: tomcat8
image: tomcat:search-api
ports:
- "8080:8080"
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
container_name: nginx
image: nginx:searchapi
depends_on:
- tomcat
ports:
- "80:80"
- "443:443"
解决方案
通过使用 docker-compose 中的 ports 选项,您将在外部公开该端口。如果从 tomcat 中删除 ports 选项,它应该仍然可以工作,因为容器应该只在内部为 docker 网络公开端口 8080。
推荐阅读
- vba - 请协助如何让每个组合框显示自己的列表然后被过滤
- javascript - onclick 更改背景添加代码,但仅在第二次单击后更改
- anylogic - 使用 Anylogic 对能源供应链进行通用建模
- python - 如何返回函数中的数字组合?
- git - 如何删除在 .gitignore 中添加了文件扩展名的文件?
- python - 为什么不能通过 BeautifuSoup 将 h3、h4 作为前一个元素
- python - python - ldap3 lib:如何向属性添加多个值
- kubernetes - Kubernetes HPA 通过自定义指标快速扩展
- flutter - 嵌套小部件中的颤振流提供程序?
- css - 单击地图时消除基于 mapbox-gl-js 的地图周围的黑色边框