Pi-hole Docker/Portainer Stack卷配置咨询:./路径含义及正确配置
Pi-hole Docker/Portainer Stack 正确配置方案
关于Docker中./的指向说明
- 本地使用
docker-compose命令时:./代表你执行docker-compose up命令时所在的终端工作目录,比如你在/home/user/pihole目录下执行命令,./etc-pihole就对应宿主机的/home/user/pihole/etc-pihole目录。 - Portainer Stack中:如果直接在Web UI粘贴配置文件,相对路径
./无法正确映射到宿主机目录(因为Portainer容器的工作目录并非你的目标目录),此时必须使用宿主机的绝对路径,或者采用Docker命名卷。
你的配置存在的问题
你在顶级volumes节点下的写法错误:Docker Compose中,顶级volumes用于定义命名卷,不能使用相对路径作为卷名。同时Portainer环境下相对路径绑定挂载不可靠,需要调整。
正确配置方案
方案1:使用宿主机绝对路径绑定挂载(适合本地/明确宿主机路径的场景)
services: pihole: container_name: pihole image: pihole/pihole:latest restart: unless-stopped ports: - 53:53/tcp - 53:53/udp - 80:80/tcp # 添加时区环境变量,避免时间同步问题 environment: - TZ=Asia/Shanghai volumes: # 替换为你宿主机上的实际绝对路径,比如 /home/yourname/pihole/etc-pihole - /path/to/your/etc-pihole:/opt/pihole/etc/pihole - /path/to/your/etc-dnsmasq.d:/opt/pihole/etc/dnsmasq.d
注意:提前在宿主机创建对应目录并设置权限,执行命令:
sudo mkdir -p /path/to/your/etc-pihole /path/to/your/etc-dnsmasq.d && sudo chown -R 1000:1000 /path/to/your/etc-pihole /path/to/your/etc-dnsmasq.d(Pi-hole容器默认用UID/GID 1000运行)
方案2:使用Docker命名卷(推荐Portainer使用,无需关心绝对路径)
命名卷由Docker管理,无需手动创建目录,数据持久化更可靠:
services: pihole: container_name: pihole image: pihole/pihole:latest restart: unless-stopped ports: - 53:53/tcp - 53:53/udp - 80:80/tcp environment: - TZ=Asia/Shanghai volumes: - pihole-config:/opt/pihole/etc/pihole - pihole-dnsmasq:/opt/pihole/etc/dnsmasq.d # 顶级volumes定义命名卷 volumes: pihole-config: pihole-dnsmasq:
补充说明
- 首次启动Pi-hole后,可通过宿主机IP:80访问Web管理界面,初始密码可通过
docker logs pihole | grep random命令查看。 - 如果遇到端口冲突(比如53端口被宿主机dnsmasq占用),需要先停止宿主机上的相关服务,或者修改容器端口映射(比如
5353:53/tcp),但这样需要将设备DNS指向宿主机IP:5353。
内容的提问来源于stack exchange,提问作者Duncan
相关产品推荐
相关产品推荐

