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

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +9 -38
Dockerfile CHANGED
@@ -1,48 +1,19 @@
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", \
 
1
+ # 使用官方镜像,但我们强制它以 root 身份运行
2
+ FROM adguard/adguardhome:latest
3
 
4
+ # --- 关键修改 ---
5
+ # 切换回 root 用户,这将覆盖掉官方镜像中可能存在的 USER 指令
6
+ # 这给了我们在这个容器中的最高权限
7
+ USER root
8
 
9
+ # 声明持久化卷
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  VOLUME ["/opt/adguardhome/work", "/opt/adguardhome/conf"]
11
 
12
  # 声明端口
13
  EXPOSE 53/udp 3000/tcp 80/tcp 443/tcp 853/tcp
14
 
15
+ # 使用 root 身份执行启动命令
16
+ # 现在它拥有在任何地方创建/写入文件的权限,不会再有 permission denied
 
17
  CMD ["/opt/adguardhome/AdGuardHome", \
18
  "--no-check-update", \
19
  "--web-addr", "0.0.0.0:3000", \