求个多个 docker 组暴露端口的优雅解答

2022-08-29 17:41:04 +08:00
 shenqi
现在情况:
开发期间,使用 docker-compose 管理 docker 容器,目前存在多个 docker-compose 组,都暴露 80 端口,都是使用 ports 方式来绑定到宿主机。


现在做法是:
将每个 docker-compose 暴露的 80 都改成一个唯一值,使得宿主机不冲突。在宿主机有一个 nginx ,然后每个进行域名的转发。
然后开发和测试都通过绑定 host 方式,使用域名进行功能的开发和测试。

现在的限制:
现在同时开发、测试的功能,已经超过了 3 个测试宿主机的数量了。然后现在假如第四个功能同时开发,那就不够环境了。


想要:
不增加宿主机和不修改域名,增加测试环境。满足第四第五第六第七的功能的同时测试开发。
相互开发中的分支不相互污染。
(数据库好办,只要复制一个库配置过去就行的)

现在的想法:
想法一:将 docker-compose 使用 macvlan 形式直接设定容器的网络和宿主机的网段同一个,但是第二组 docker-compose 容器就使用不了这个 c 段了。(此路径感觉走不通了,或者哪里细节需要注意的大佬们指导下)
想法二:宿主机启动 vagrant ,自动使用 c 端,然后每个里面再跑 docker (目前在这个没试过)
想法三:请求大佬们指导下。
1707 次点击
所在节点    Docker
16 条回复
libook
2022-08-29 17:47:32 +08:00
你有多个服务,基本就只能用反向代理还根据 HTTP 请求特征来分流,比如域名、路径等。

你多个服务一定都必须用 80 端口吗?每个服务都单独用一个唯一端口就好了吧,比如从 9000 开始往后排,前端调用后端的地址做成统一配置文件可配的,每次部署的时候根据所用的测试服务的地址和端口号配置一下就好了。
herozzm
2022-08-29 17:49:09 +08:00
docker 不接管宿主机的端口管理权限,用 iptables 将 80 端口转发给 nginx ,然后 nginx 来设置域名转发即可
XiLingHost
2022-08-29 17:54:56 +08:00
试试 traefik ,用 docker provider 来提供配置,这样就不需要把容器的端口暴露出来了,只需要在 label 里配置好服务和路由就行了

https://doc.traefik.io/traefik/providers/docker/
momocraft
2022-08-29 17:56:42 +08:00
没看出为什么只能有 3 个环境 这限制哪来的
shenqi
2022-08-29 18:01:52 +08:00
@momocraft 物理宿主机三台,每台一个 ip
lovelylain
2022-08-29 18:15:17 +08:00
whistle 正向代理改请求咯
bwangel
2022-08-29 18:37:59 +08:00
你开发是在宿主机上进行的吗?如果是的话可以试试这样的方法,一台宿主机就够了

修改 /etc/hosts ,绑定 N 个开发用的域名到 127.0.0.1

这样 nginx 就能配置无限多个域名,根据 host route 到不同的 docker 端口上了。
momocraft
2022-08-29 18:51:27 +08:00
一个 ip 可以 host 无数个域名

把私有 ip 绑到域名上 就不用让客户端机器改 hosts 了
butanediol2d
2022-08-29 19:06:54 +08:00
推荐一个 nip.io
它可以把 *.a.b.c.d.nip.io 解析为 a.b.c.d
LindsayZhou
2022-08-29 23:04:07 +08:00
我记得 docker 端口映射可以指定绑定的 ip 吧,物理网卡上多加几个 ip 就行了,直接加还是用桥接应该都可以。
不过加多个同网段的 ip 说不定会有坑,路由问题上的,这个不太确定。
imycc
2022-08-29 23:32:29 +08:00
emm ,端口不暴露到宿主机,只暴露到容器内部的网络上,就不用考虑冲突的问题。查出来几个 web 入口的容器 ip 地址,配置在 nginx 上。这样麻烦的地方在于重启机器跟环境之后 ip 可能会变,得重新配一下,要不入口会乱掉。
shenqi
2022-08-30 10:05:06 +08:00
@LindsayZhou 这个方案算是目前最接近我的想法的,还在尝试中。但是我猜想的做法不是物理上加多网卡,而是想办法将单个物理网卡设置多个虚拟成实际可访问 ip 的网卡。
mk0114
2022-09-07 23:19:33 +08:00
@butanediol2d 可惜没有办法在内网搞到证书不然就完美了
butanediol2d
2022-09-08 00:44:12 +08:00
@mk0114 用自签证书呗
mk0114
2022-09-08 08:38:44 +08:00
@butanediol2d 可是你还得让测试和产品再安装证书,让他们改个 hosts 文件都难。
mk0114
2022-09-08 10:47:55 +08:00
去阿里几块钱弄个域名,然后泛域名解析到你局域网内的 ip ,通过泛域名前缀来反向代理 docker 内的服务就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/876263

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX