点击展开更新日志

2025

05-31

文章出现了!

nexttime

会有些什么呢(❁´◡`❁)

源起

在使用 Mac 版 Docker Desktop 的过程中遇到几个问题,折腾了好久,虽然中途几次想要换到了 Linux 环境跑 Docker,但最终还是硬挺着用了 Docker Desktop,顺便把遇到的几个问题简要记录。

问题

部署 AdguardHome 53 端口冲突

  • 现象:容器/实机部署 AdguardHome 时提示 53 端口被占用,使用 sudo lsof -i :53 看到存在进程 mDNSresponder 占用该端口,杀死后会自动重启
  • 原因:开启了 Docker Desktop 配置中的 Use kernel networking for UDP 。关闭即可,位置在【设置】-【Resources】-【Network】下面。

容器 AdguardHome 客户端地址异常

  • 现象:容器部署 AdGuardHome 后,修改客户端DNS服务器后,后台看到的请求地址都是 192.168.65.1,不是客户端实际地址。

  • 原因:局域网所有设备访问 AGH 都需要经过宿主机 Docker 网卡,默认网段为 192.168.65.0/24,配置位置和上面一致。即使修改容器部署网络为 host 也无法解决,修改 Desktop 中子网为局域网子网不确定是否可行(没试)。最终建议是直接实机部署:

    1
    curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

    安装位置:/Applications/AdGuardHome ,执行该目录下主程序进行启停或卸载。

    另外,关于配置中 http.address 管理页面监听地址,可以用 0.0.0.0:3000 ,或使用 127.0.0.1:3000 搭配反向代理。

反向代理工具选择

我个人还是很推荐优先使用 Nginx Proxy Manager 的,配置代理及 SSL 都很方便,但是,考虑到我在宿主机上部署了近20个反向代理应用,使用容器部署不能直接使用 127.0.0.1 指定代理地址,后续迁移可能有点麻烦,因此选择了宿主机部署的方式,最终选择了本地编译部署 openresty,并使用 nginxconfig 生成相关配置。

如果使用了 nginxconfig 协助生成了配置,默认已经包含了 websocket,但你有可能会遇到部分应用代理(比如 PVE)返回 504 或这样的报错:

1
EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "default-src 'self' http: https: data: blob: 'unsafe-inline'".

原因是因为 nginxconfig 默认配置中 CSP 安全配置导致的,如果遇到这个问题,注释掉 nginx 配置中 include nginxconfig.io/security.conf; 配置后重启试试,大概率是可以解决问题的。这里也顺便提供一个问题排查思路:

  1. IP 直接访问确保应用后台正常;
  2. 复制并重新写一个最小化代理配置,参考官网文档建议,验证是否正确;
  3. 借助 AI 的力量;
  4. 睡一觉,明日再看,从当局者变成旁观者获取就一目了然了。

关于更加详细的配置可以参考 阮一峰的网络日志-Content Securoty Policy 入门教程

既然都提到了编译部署,贴一下我的编译参数供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
./configure \
--prefix=/usr/local/openresty \
--with-openssl=/opt/homebrew/opt/openssl@3 \
--with-pcre \
--with-http_v2_module \
--with-http_v3_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-stream \
--with-stream_ssl_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-cc-opt="-I$(brew --prefix openssl@3)/include" \
--with-ld-opt="-L$(brew --prefix openssl@3)/lib"