首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker编写nginx和tomcat,在互联网上只暴露nginx

docker编写nginx和tomcat,在互联网上只暴露nginx
EN

Stack Overflow用户
提问于 2018-08-29 00:01:49
回答 2查看 4.8K关注 0票数 1

我正在使用Docker组合文件来创建nginx和tomcat容器。nginx将被用作反向代理,因此它将访问tomcat。我使用两个单独的contaienrs使用azure容器实例成功地做到了这一点。你点击了nginx的URL,然后被重定向到tomcat securley,因为nginx有HTTPS和证书。在那之前一切都没问题。但问题是,如果你单独访问,通过http yo的tomcat Ip也可以访问容器,这是不安全的。我只想让nginx访问tomcat。如何才能做到这一点?我现在正在尝试使用docker compose,我知道容器将使用相同的网络并可以相互连接,但是我如何才能实现nginx连接到Tomcat,tomcat只能通过https上的nginx重定向访问,而tomcat不能被单独的http访问。这就是我拥有的YML,但是我不知道如何管理端口来实现我想要的。这个是可能的吗?

代码语言:javascript
复制
    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"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-29 00:09:23

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

票数 1
EN

Stack Overflow用户

发布于 2018-08-29 00:40:39

只删除tomcat服务中您的docker-compose文件中暴露的端口,反向代理将使用您的自定义nginx.conf与tomcat容器的容器链接和内部端口一起工作于docker的内部网络,这里我附上一个示例:

代码语言:javascript
复制
  version: '3.1'
    services:

      tomcat:
        # build:
        #   context: ./tomcat
        #   dockerfile: Dockerfile
        container_name: tomcat8
        image: tomcat:search-api

      nginx:
        build:
          context: ./nginx
          dockerfile: Dockerfile
        container_name: nginx
        image: nginx:searchapi
        links:
          - "tomcat"
        volumes:
          - ./proxyConf:/etc/nginx/conf.d
        depends_on: 
        - tomcat 
        ports:
          - "80:80"
          - "443:443"

proxyConf/default.conf文件:

代码语言:javascript
复制
server {
  listen 80;
  server_name localhost;

  location / {
    proxy_pass http://tomcat:8080;
  }
}

在代理传递中,我添加了tomcat的docker-compose链接和tomcat容器的内部端口。

这是我的目录树:

代码语言:javascript
复制
C:.
│   docker-compose.yml
│
├───nginx
│       Dockerfile
│
├───proxyConf
│       default.conf
│
└───tomcat
        Dockerfile
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52062042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档