Update Dockerfile
Browse files- Dockerfile +42 -8
Dockerfile
CHANGED
@@ -1,15 +1,49 @@
|
|
1 |
-
#
|
2 |
-
FROM adguard/adguardhome:latest
|
3 |
|
4 |
-
#
|
5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
VOLUME ["/opt/adguardhome/work", "/opt/adguardhome/conf"]
|
9 |
|
10 |
-
#
|
11 |
-
|
12 |
-
|
|
|
|
|
|
|
|
|
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", \
|