xcolorday commited on
Commit
286fa8b
·
verified ·
1 Parent(s): 3717ff9

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +30 -25
Dockerfile CHANGED
@@ -1,34 +1,39 @@
1
  # 1. 使用官方的 gotify/server 镜像作为基础
2
  FROM gotify/server
3
 
4
- # 设置时区
5
- ENV TZ="Asia/Shanghai"
6
-
7
- # 2. 切换到 root 用户以获得最高权限
8
  USER root
9
 
10
- # 3. 在一个指令中完成所有文件系统设置:
11
- # - 创建 /data 目录
12
- # - 设置正确的用户权限
13
- # - 创建符号链接,以解决 Hugging Face 平台的执行路径问题
14
- RUN mkdir -p /data \
15
- && chown -R 1000:1000 /data \
16
- && ln -s /app/gotify-server /data/gotify-app
17
-
18
- # 4. 切换回低权限的普通用户,保证安全
19
- USER 1000
20
-
21
- # 5. 将工作目录设置为 /data,解决程序启动时的权限问题
22
- WORKDIR /data
23
-
24
- # --- 运行时配置 ---
25
-
26
- # 6. 设置服务在容器内部监听的端口
 
27
  ENV GOTIFY_SERVER_PORT=7860
 
 
 
28
 
 
 
29
 
30
- # 8. 【决定性的修复】设置服务的公开 URL
31
- # 这是程序正确运行所必需的。
32
- # !!! 请务必将下面的 "your-space-name" 替换成你自己的 Space 名称 !!!
33
- ENV GOTIFY_SERVER_URL="https://xcolorday-gotify.hf.space"
34
 
 
 
 
 
 
1
  # 1. 使用官方的 gotify/server 镜像作为基础
2
  FROM gotify/server
3
 
4
+ # 2. 切换到 root 用户,以便创建和修改文件
 
 
 
5
  USER root
6
 
7
+ # 3. 创建一个自定义入口脚本。这个脚本会在容器启动时首先运行。
8
+ # - `set -e` 表示如果任何命令失败,脚本将立即退出。
9
+ # - `ln -sf ...` 在运行时创建符号链接,解决了 VOLUME 覆盖问题。
10
+ # -s: 创建符号链接
11
+ # -f: 如果目标已存在,则强制覆盖
12
+ # - `exec "$@"` 执行传递给脚本的任何命令(即 Hugging Face 的 "./gotify-app")。
13
+ RUN echo '#!/bin/sh' > /entrypoint.sh && \
14
+ echo 'set -e' >> /entrypoint.sh && \
15
+ echo 'echo "Entrypoint script running..."' >> /entrypoint.sh && \
16
+ echo 'echo "Creating symbolic link from /app/gotify-server to /data/gotify-app"' >> /entrypoint.sh && \
17
+ echo 'ln -sf /app/gotify-server /data/gotify-app' >> /entrypoint.sh && \
18
+ echo 'echo "Link created. Executing command: $@" ' >> /entrypoint.sh && \
19
+ echo 'exec "$@"' >> /entrypoint.sh
20
+
21
+ # 4. 赋予我们的入口脚本可执行权限
22
+ RUN chmod +x /entrypoint.sh
23
+
24
+ # 5. 设置所有必要的环境变量
25
  ENV GOTIFY_SERVER_PORT=7860
26
+ ENV TZ="Asia/Shanghai"
27
+ # !!! 请务必将下面的 "your-space-name" 替换成你自己的 Space 名称 !!!
28
+ ENV GOTIFY_SERVER_URL="https://xcolorday-gotify.hf.space"
29
 
30
+ # 6. 将工作目录设置为 /data。这依然是必须的,因为 Gotify 会在这里写数据。
31
+ WORKDIR /data
32
 
33
+ # 7. 【关键】用我们自己的脚本覆盖掉镜像默认的 ENTRYPOINT
34
+ ENTRYPOINT ["/entrypoint.sh"]
 
 
35
 
36
+ # 解释:
37
+ # Hugging Face 平台现在会这样启动容器: /entrypoint.sh ./gotify-app
38
+ # 我们的脚本会首先运行,创建符号链接,然后执行 `exec ./gotify-app`。
39
+ # 因为符号链接刚刚被创建,这个命令现在可以成功执行了。