首页 > 解决方案 > 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"

标签: dockernginxtomcat8docker-containernginx-reverse-proxy

解决方案


通过使用 docker-compose 中的 ports 选项,您将在外部公开该端口。如果从 tomcat 中删除 ports 选项,它应该仍然可以工作,因为容器应该只在内部为 docker 网络公开端口 8080。


推荐阅读