作为培训模型,我正在尝试在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容器。
如果有人可以给我提示。
答案 0 :(得分:0)
我终于找到了解决我问题的方法。 知道詹金斯图像默认暴露端口是8080,我已经设置了:
ports:
- "8080"
关于docker-compose文件中的jenkins_ci服务定义。
现在,我可以看到jenkins_ci容器没有更多的IP地址。但是,由于服务名称(so jenkins_ci),仍然可以从另一个容器(在这里为nginx)访问它。
我在此question中找到了解决方案。
不幸的是,docker-compose port syntax section中没有撤回声明暴露的端口号而没有其公共对应方隐藏暴露的端口(因此,如果根本没有公开暴露的IP,则不会被调用)。