nginx docker 容器大家倾向于用 host 模式还是 bridge 模式?

2023-05-01 11:16:35 +08:00
 qq565425677
我之前用一直自建的 bridge ,但是客户端使用 ipv6 网络访问时,地址会在 docker 容器中转换成内部 ipv4 ,一般的使用上没什么问题,但总归不爽。听说 docker 开启容器内 ipv6 支持比较麻烦而且还有 bug 所以暂时不想折腾。

另一种方法是使用 host 模式,既支持 ipv6 ,性能也更高一些,缺点是不如 bridge 隔离性,即安全性好。

因为我也不清楚两种模式性能和安全性分别能差多少,以及实际使用下来哪个更可以忽略,不知道如何更好的取舍,所以想请教一下大家,还请大家不吝赐教,谢谢!
1649 次点击
所在节点    问与答
9 条回复
Heisenbery
2023-05-01 13:12:03 +08:00
我的使用习惯是 qbittorent 、tailscale 这些下载类或者对 IPV6 或网络有强需求的 docker 使用 host ,其他的都用 bridge 。

对我而言,两者最大的区别就是 host 不需要手动一个个映射端口
lovelylain
2023-05-01 16:28:34 +08:00
需要反向代理访问其他服务的服务走 host ,例如 nginx ,其他服务非必要的话用 bridge ,用 nginx 反代
julyclyde
2023-05-02 10:41:50 +08:00
host 比较方便
要不然就会带一堆 iptables 规则,很烦
lovelylain
2023-05-02 15:20:27 +08:00
“缺点:反代端口配置麻烦,以前在同一个 docker 网络,反代时只要输入容器名字+端口号即可。现在需要先暴露容器的端口,各端口还不能冲突,nginx 上还要再新开一个端口去反代容器的端口,也不能使用容器名字只能用 localhost...”
自己搞错了方案不能怪到 host 模式上呀,不需要给其他容器暴露端口的,只要自定义网络并固定容器 ip ,就可以在 host 的 nginx 内通过容器 ip:容器端口反代的。
hyperbin
2023-05-02 20:02:20 +08:00
新建个 docker network ,把 nginx 和一堆服务都加入,做反代后对外只需要暴露一个 80/443 ,本地再配上各服务的域名就行了
qq565425677
2023-05-03 10:59:14 +08:00
@lovelylain #4 多谢老哥的方案,这样确实比开端口方便的多,就是指定 ip 还是不如原来在一个网路下直接打容器名字方便,不过这样已经很可以接受了
qq565425677
2023-05-03 11:00:52 +08:00
@hyperbin #5 这样确实是最方便的,就是 ipv6 支持的不好,只能通过 ipv6 访问,但是看到的 ip 是从 V6 转到 v4 的
lovelylain
2023-05-03 12:24:18 +08:00
@qq565425677 不固定 ip 也可以的,在容器网络里跑一个 dns 服务或者反代 dns 的容器,在 nginx 里改 /etc/resolve.conf 或者用 resolver 使用该 dns 容器,就可以在 nginx 里用容器名去反代了,但是对于个人使用来说,显然还是固定 ip 更省事。
qq565425677
2023-05-03 13:10:43 +08:00
@lovelylain #8 666 啊,很棒的思路

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

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

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

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

© 2021 V2EX