作为一个训练模型,我正在尝试在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反向代理地址访问。
如果有人能给我一个提示。
发布于 2019-09-26 17:45:02
我终于找到了解决我的问题的办法。知道jenkins镜像的默认暴露端口是8080,我已经设置了:
ports:
- "8080"在docker-compose文件中的jenkins_ci服务定义上。
现在,我可以看到jenkins_ci容器没有更多的IP地址了。尽管如此,它仍然可以从另一个容器(这里是nginx容器)访问,这要归功于服务名称(所以jenkins_ci)。
我在这个question中找到了解决方案。
不幸的是,在docker-compose port syntax section中不能调用声明公开的端口号而没有其公共对应物来隐藏公开的端口(因此,如果根本没有公开的端口,还会隐藏IP )。
https://stackoverflow.com/questions/58113342
复制相似问题