You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Docker部署Pi-hole与OpenVPN,能否用容器名作为推送DNS地址?

用容器名作为DNS地址的方案完全可行!

当然可以用push "dhcp-option DNS pihole"代替固定IP,这其实是Docker用户定义网络的原生能力,比固定IP配置更灵活省心。下面给你拆解具体实现步骤:

核心原理

Docker的自定义网络(非默认bridge)默认支持容器名称解析——同一个网络内的容器可以直接用对方的容器名互相访问,Docker内置的DNS服务会自动把容器名解析为对应的容器IP。只要你的OpenVPN和Pi-hole容器处于同一个自定义网络中,这个配置就能正常生效。

具体配置步骤

1. 让两个容器共享同一个自定义网络

在你的docker-compose.yml里定义一个共同的网络,然后将两个容器都加入该网络:

version: '3.8'

# 定义共享的自定义网络
networks:
  vpn-dns-network:
    driver: bridge

services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole  # 容器名必须和push指令里的名称完全匹配
    # 你的Pi-hole其他配置(ports、volumes、environment等)
    networks:
      - vpn-dns-network

  openvpn:
    image: kylemanna/openvpn:latest
    # 你的OpenVPN其他配置(ports、volumes等)
    # 修改push配置,用容器名替代固定IP
    environment:
      - OPENVPN_PUSH=dhcp-option DNS pihole
    # 如果你是通过挂载server.conf配置OpenVPN,直接在server.conf里修改:
    # push "dhcp-option DNS pihole"
    networks:
      - vpn-dns-network

2. 验证配置是否生效

  • 重启容器:docker-compose up -d
  • 连接VPN后,在客户端查看DNS服务器地址,应该会指向Pi-hole容器的IP
  • 可以进入OpenVPN容器测试名称解析:docker exec -it openvpn ping pihole,如果能正常ping通,说明解析功能正常

注意事项

  • 容器名大小写敏感,确保pihole和你push指令里的名称完全一致
  • 优先使用自定义网络而非Docker默认bridge网络,自定义网络的隔离性和名称解析稳定性更好
  • 不需要再给Pi-hole固定IP了,即使Docker重启后给Pi-hole分配了新IP,容器名解析依然会自动同步,比固定IP更可靠

内容的提问来源于stack exchange,提问作者Pierre CORBEL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:35:11