docker - docker组成nginx和tomcat,仅在互联网上公开nginx

标签 docker nginx tomcat8 docker-container nginx-reverse-proxy

我正在使用Docker组合文件来创建nginx和tomcat容器。 nginx将用作反向代理,因此它将访问tomcat。我能够使用天蓝色的容器instaces成功地使用2个单独的容器完成此操作。您点击了nginx的URL,然后将您重定向到tomcat securley,因为nginx具有HTTPS和证书。
直到一切正常。但是问题在于,如果单独访问http的tomcat Ip,也可以访问该容器,那是不安全的。我只想让nginx访问tomcat。如何做到这一点?我正在尝试使用docker compose,我知道容器将使用相同的网络并且可以相互连接,但是我如何才能实现nginx连接到Tomcat和tomcat仅可以通过nginx的重定向来访问https,并且该tomcat无法单独通过http访问。这是我拥有的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中删除端口选项,则该选项仍将起作用,因为该容器应仅在内部为docker网络公开内部端口8080。

关于docker - docker组成nginx和tomcat,仅在互联网上公开nginx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52062042/

相关文章:

docker - 在Docker中,无法使用regsvr32注册第三方DLL [在Windows上]

node.js - 即使在端口绑定(bind)后,docker 上的 Node 服务器也无法在本地主机上访问

angularjs - 如何在Tomcat 9的rewrite.config文件中为多个angular项目添加多个重写规则

macos - Tomcat 8.0 无法在 Mac 上运行

java - DotCMS Docker MySQL 500

docker - 无法使用前端dockerfile.v0解决:无法构建LLB:执行程序失败

node.js - Node.js 的 Nginx 重写规则

php - AWS Redis 与 Nginx 和 PHP + 多连接

nginx - 如何在裸机上使用 hostNetwork 安装 nginx-ingress?

java - Tomcat 8 编码错误