【问题标题】:docker-compose : How can I isolate a docker container from "outside" (jenkins container + nginx reverse proxy)docker-compose:如何将 docker 容器与“外部”隔离(jenkins 容器 + nginx 反向代理)
【发布时间】:2019-09-26 09:10:04
【问题描述】:

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

我使用 docker 容器通过 ansible playbook 进行了第一次设置,它运行良好。 但是,我无法使用 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。这是我不想做的。我希望 jenkins 容器只能通过 nginx 反向代理地址访问。

如果有人可以给我一个提示。

【问题讨论】:

  • 你不能改变它,隔离将使用只允许 nginx 端口的防火墙,我不知道另一种可能的方式

标签: networking docker-compose


【解决方案1】:

我终于找到了解决问题的方法。 知道jenkins镜像默认暴露端口是8080,我设置了:

ports:
  - "8080"

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

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

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

不幸的是,在 docker-compose port syntax section 中不记得在没有公开对应端口的情况下声明公开的端口号以隐藏公开的端口(因此,如果根本没有公开公开的端口,则隐藏 IP)。

【讨论】:

    猜你喜欢
    • 2021-05-04
    • 1970-01-01
    • 2019-03-20
    • 2018-03-20
    • 2019-05-04
    • 2020-09-10
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多