docker-compose:如何将docker容器与“外部”隔离(詹金斯容器+ nginx反向代理)

时间:2019-09-26 09:10:04

标签: networking docker-compose

作为培训模型,我正在尝试在nginx反向代理后面设置jenkins实例,同时还要确保https。 因此,我为nginx创建了一个容器,为jenkins创建了一个容器。我已经成功,包括带有(自动签名)证书的nginx配置。 我可以使用https和nginx容器ip从我的机器访问jenkins实例。 但是我的最终目标是完全隔离jenkins容器,以便根本无法从“外部”到达它。这是没有实现的。 官方映像中声明的默认端口为8080,我仍然可以使用jenkins容器IP和8080端口访问jenkins实例。

我使用docker容器通过ansible剧本进行了首次设置,并且运行良好。 但是,我无法通过docker-compose获得相同的行为。 这是我写的docker-compose文件。

version: "3.5"

services:
  revproxy:
    image: nginx:alpine
    depends_on:
      - jenkins_ci
    networks:
      - proxy
    ports:
      - "90:8080"
      - "443:443"
    volumes:
      - /home/vagrant/dockerResources/etc/certs:/etc/nginx/certs
      - /home/vagrant/dockerResources/etc/nginx/conf.d/reverse_proxy.conf:/etc/nginx/conf.d/reverse_proxy.conf
  jenkins_ci:
    image: jenkins/jenkins:lts
    networks:
      - proxy
networks:
  proxy:
    name: revProxy
    internal: yes

在检查jenkins_ci容器时,我可以找到它的IP,并使用8080端口将我的浏览器定向到该IP。这是我不想做的。我希望只能通过nginx反向代理地址访问jenkins容器。

如果有人可以给我提示。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决我问题的方法。 知道詹金斯图像默认暴露端口是8080,我已经设置了:

ports:
  - "8080"

关于docker-compose文件中的jenkins_ci服务定义。

现在,我可以看到jenkins_ci容器没有更多的IP地址。但是,由于服务名称(so jenkins_ci),仍然可以从另一个容器(在这里为nginx)访问它。

我在此question中找到了解决方案。

不幸的是,docker-compose port syntax section中没有撤回声明暴露的端口号而没有其公共对应方隐藏暴露的端口(因此,如果根本没有公开暴露的IP,则不会被调用)。