Update Dockerfile
Browse files- Dockerfile +9 -38
Dockerfile
CHANGED
@@ -1,48 +1,19 @@
|
|
1 |
-
#
|
2 |
-
FROM adguard/adguardhome:latest
|
3 |
|
4 |
-
#
|
5 |
-
|
|
|
|
|
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 |
-
#
|
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", \
|