我在nginx反向代理后面的 RPi 上运行pihole,以及其他几个代理容器。我想要:
- 将 pihole 容器的端口 80 映射到仅限内部的网络(nginx 代理到公共端口 80)
- 将端口 53 (DNS) 映射到默认网络(使其公开可用)。
默认情况下,所有端口都发布在容器所属的所有网络上,我试图避免这种情况。本质上,我想这样做:
version: '3'
services:
pihole:
container_name: pihole
hostname: pihole
image: pihole/pihole:latest
networks:
- default
- intraonly
ports:
- default:53:53/tcp
- default:53:53/udp
- intraonly:80/tcp
- intraonly:443/tcp
[...nginx & other services definitions follow...]
networks:
intraonly:
driver: bridge
internal: true
上面显然失败了,因为文档清楚地表明它只在端口定义中需要一个IP 地址:
指定要绑定到两个端口的主机 IP 地址(默认为 0.0.0.0,表示所有接口):(IPADDR:HOSTPORT:CONTAINERPORT)。
然而,这似乎很疯狂,因为每次重建容器时 IP 地址都会发生变化。在其他地方,文档建议避免通过 IP 地址寻址其他容器,而是选择符号服务名称(由 DNS 发布)。
我错过了什么?在不硬编码 IP 地址的情况下,在特定接口上公开端口的正确/可靠方法是什么?(我知道我可以通过使用expose
语法来实现仅限内部的端口),但是将端口绑定到特定自定义网络的问题仍然存在。)