0

我在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语法来实现仅限内部的端口),但是将端口绑定到特定自定义网络的问题仍然存在。)

4

0 回答 0