将端口绑定到 Docker Compose 中的特定网络

时间:2021-05-02 09:51:44

标签: docker nginx networking docker-compose pihole

我在 pihole 反向代理后面的 RPi 上运行 nginx,以及其他几个代理容器。我想:

  • 将 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地址在端口定义中:

<块引用>

指定要绑定到 AND 两个端口的主机 IP 地址(默认为 0.0.0.0,表示所有接口):(IPADDR:HOSTPORT:CONTAINERPORT)。

然而,这看起来很疯狂,因为IP 地址每次都会改变我重建容器。在其他地方,文档建议避免寻址其他容器通过 IP 地址,而是选择符号服务名称(由 DNS 发布)。

我错过了什么? 在没有硬编码 IP 地址的情况下在特定接口上公开端口的正确/可靠方法是什么? (我知道我可以使用 expose 语法实现仅限内部使用的端口),但将端口绑定到特定自定义网络的问题仍然存在。)

0 个答案:

没有答案