yangtb24 commited on
Commit
ef744f4
·
verified ·
1 Parent(s): bbdcb3c

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +42 -8
Dockerfile CHANGED
@@ -1,15 +1,49 @@
1
- # 使用 AdGuard Home 官方的最新镜像
2
- FROM adguard/adguardhome:latest
3
 
4
- # 声明端口
5
- EXPOSE 53/udp 3000/tcp 80/tcp 443/tcp 853/tcp
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
- # 设置持久化卷
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  VOLUME ["/opt/adguardhome/work", "/opt/adguardhome/conf"]
9
 
10
- # 最终的、包含了权限绕过参数的启动命令
11
- # --no-permcheck: 解决首次启动时的权限问题,这是关键!
12
- CMD ["--no-permcheck", \
 
 
 
 
13
  "--no-check-update", \
14
  "--web-addr", "0.0.0.0:3000", \
15
  "-c", "/opt/adguardhome/conf/AdGuardHome.yaml", \
 
1
+ # 阶段 1: 从官方镜像获取可执行文件
2
+ FROM adguard/adguardhome:latest as builder
3
 
4
+ # 阶段 2: 使用一个标准的、干净的基础镜像 (debian)
5
+ FROM debian:bullseye-slim
6
+
7
+ # 设置一些环境变量,避免在安装时出现交互式提示
8
+ ENV DEBIAN_FRONTEND=noninteractive
9
+
10
+ # 更新软件包列表并安装 curl 和 ca-certificates (用于健康检查和网络请求)
11
+ RUN apt-get update && apt-get install -y curl ca-certificates && rm -rf /var/lib/apt/lists/*
12
+
13
+ # 从阶段 1 (builder) 复制 AdGuard Home 的可执行文件
14
+ COPY --from=builder /opt/adguardhome/AdGuardHome /opt/adguardhome/AdGuardHome
15
+
16
+ # --- 关键的权限准备步骤 ---
17
+ # 定义 AdGuard Home 的工作和配置目录
18
+ ENV AGH_WORK_DIR=/opt/adguardhome/work
19
+ ENV AGH_CONF_DIR=/opt/adguardhome/conf
20
+
21
+ # 1. 创建一个名为 'adguard' 的非 root 用户和组,这模仿了官方镜像的行为
22
+ RUN groupadd -r adguard && useradd -r -s /bin/false -g adguard adguard
23
 
24
+ # 2. 创建工作目录和配置目录
25
+ RUN mkdir -p ${AGH_WORK_DIR} ${AGH_CONF_DIR}
26
+
27
+ # 3. 创建一个空的配置文件,这是绕过“首次启动”检查的关键!
28
+ RUN touch ${AGH_CONF_DIR}/AdGuardHome.yaml
29
+
30
+ # 4. 将这些目录和文件的所有权交给 'adguard' 用户
31
+ RUN chown -R adguard:adguard ${AGH_WORK_DIR} ${AGH_CONF_DIR} /opt/adguardhome
32
+
33
+ # --- 运行配置 ---
34
+ # 切换到非 root 用户来运行程序,这是安全最佳实践
35
+ USER adguard
36
+
37
+ # 声明持久化卷,Hugging Face 会将这里的目录映射到持久化存储
38
  VOLUME ["/opt/adguardhome/work", "/opt/adguardhome/conf"]
39
 
40
+ # 声明端口
41
+ EXPOSE 53/udp 3000/tcp 80/tcp 443/tcp 853/tcp
42
+
43
+ # 定义最终的启动命令
44
+ # 由于我们已经切换到 adguard 用户,程序会以这个用户的身份运行
45
+ # 我们不再需要 --no-permcheck,因为权限问题已经被手动解决了
46
+ CMD ["/opt/adguardhome/AdGuardHome", \
47
  "--no-check-update", \
48
  "--web-addr", "0.0.0.0:3000", \
49
  "-c", "/opt/adguardhome/conf/AdGuardHome.yaml", \