| # 使用官方镜像,获取可执行文件 | |
| FROM adguard/adguardhome:latest | |
| # 在构建时,我们仍然需要 root 权限来创建目录和设置权限 | |
| USER root | |
| # 1. 在唯一可能写入的 /tmp 目录中创建我们的工作区 | |
| RUN mkdir -p /tmp/adguard/work /tmp/adguard/conf | |
| # 2. 在这个 "安全区" 中创建配置文件以绕过 Bug | |
| RUN printf 'bind_host: 0.0.0.0\n\ | |
| bind_port: 3000\n\ | |
| schema_version: 29\n' > /tmp/adguard/conf/AdGuardHome.yaml | |
| # 3. 关键中的关键!将这个目录的权限设置为 777 (任何人都可以读写) | |
| # 这是为了让那个由 Hugging Face 强制指定的、我们不认识的随机用户, | |
| # 也能够拥有写入这个目录的权限。 | |
| RUN chmod -R 777 /tmp/adguard | |
| # 4. 我们不需要 VOLUME,只需要暴露端口 | |
| EXPOSE 3000 | |
| # 5. 启动命令,所有路径都指向 /tmp 下的 "安全区" | |
| # CMD 中不包含可执行文件名,因为它在 ENTRYPOINT 中 | |
| CMD ["-c", "/tmp/adguard/conf/AdGuardHome.yaml", \ | |
| "-w", "/tmp/adguard/work", \ | |
| "--no-check-update"] | |