renminwansui1976 commited on
Commit
a4fb13f
·
unverified ·
1 Parent(s): 80bce35

更新 Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +18 -24
Dockerfile CHANGED
@@ -1,7 +1,7 @@
1
  # syntax=docker/dockerfile:1
2
 
3
  # --- 阶段 1: 编译 Rust 二进制文件 ---
4
- FROM rust:1.94.0-slim-bookworm AS builder
5
  WORKDIR /app
6
 
7
  # 安装编译所需的系统依赖
@@ -10,47 +10,41 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
10
  libssl-dev \
11
  && rm -rf /var/lib/apt/lists/*
12
 
13
- # 拷贝配置文件并预编译依赖(利用 Docker 缓存)
14
  COPY Cargo.toml ./
15
- # 如果有 Cargo.lock 也建议加上: COPY Cargo.lock ./
16
 
17
- # 拷贝源代码并进行正式编译
18
  COPY src ./src
19
  RUN cargo build --release
20
 
21
  # --- 阶段 2: 最终运行环境 ---
22
- # 使用 Playwright 官方镜像,注意:此镜像基于 Ubuntu,
23
- # 但为了确保浏览器依赖完整,它是最稳妥的选择。
24
  FROM mcr.microsoft.com/playwright:v1.51.0-jammy AS runtime
25
 
26
- # 安装额外的运行时工具(如 tini 用于进程管理)
27
  RUN apt-get update && apt-get install -y --no-install-recommends \
28
  ca-certificates \
29
  tini \
30
  && rm -rf /var/lib/apt/lists/*
31
 
32
- # 【关键修改】修复 exit code 4: 兼容性处理用户创建
33
- # 如果 UID 1000 或 user 已存在则跳过,否则创建它
34
  RUN id -u user >/dev/null 2>&1 || useradd -m -u 1000 -s /bin/bash user
35
 
36
- # 准备工作目录并确保权限正确
37
  WORKDIR /home/user/app
38
- RUN chown -R 1000:1000 /home/user
39
 
40
- # 从 builder 阶段拷贝编译好的二进制文件
41
- # 注意:请确认您二进制文件名是 openclaw-entrypoint 还是 openclaw-hf-sync
42
- COPY --from=builder /app/target/release/openclaw-entrypoint /usr/local/bin/openclaw-entrypoint
43
- RUN chmod +x /usr/local/bin/openclaw-entrypoint
44
 
45
- # 设置环境变量,确保 Playwright 能找到浏览器
46
- ENV HOME=/home/user
47
- ENV PATH="/home/user/.local/bin:${PATH}"
 
48
 
49
- # 切换到非 root 用户运行
 
50
  USER 1000:1000
51
 
52
- # 使用 tini 作为 init 进程,防止僵尸进程并正确处理信号
53
- ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/openclaw-entrypoint"]
54
-
55
- # 默认启动命令
56
- CMD ["bash"]
 
1
  # syntax=docker/dockerfile:1
2
 
3
  # --- 阶段 1: 编译 Rust 二进制文件 ---
4
+ FROM rust:1.85-slim-bookworm AS builder
5
  WORKDIR /app
6
 
7
  # 安装编译所需的系统依赖
 
10
  libssl-dev \
11
  && rm -rf /var/lib/apt/lists/*
12
 
13
+ # 拷贝依赖配置
14
  COPY Cargo.toml ./
 
15
 
16
+ # 拷贝源代码并进行编译
17
  COPY src ./src
18
  RUN cargo build --release
19
 
20
  # --- 阶段 2: 最终运行环境 ---
21
+ # 使用 Playwright 官方镜像确保浏览器环境完整
 
22
  FROM mcr.microsoft.com/playwright:v1.51.0-jammy AS runtime
23
 
24
+ # 安装运行时工具
25
  RUN apt-get update && apt-get install -y --no-install-recommends \
26
  ca-certificates \
27
  tini \
28
  && rm -rf /var/lib/apt/lists/*
29
 
30
+ # 解决 UID 1000 冲突(Hugging Face 必加)
 
31
  RUN id -u user >/dev/null 2>&1 || useradd -m -u 1000 -s /bin/bash user
32
 
33
+ # 准备工作目录
34
  WORKDIR /home/user/app
 
35
 
36
+ # 【核心修复】从 builder 拷贝正确的二进制文件
37
+ # 路径必须与 Cargo.toml 中name = "openclaw-hf-sync" 对应
38
+ COPY --from=builder /app/target/release/openclaw-hf-sync /usr/local/bin/openclaw-hf-sync
 
39
 
40
+ # 设置权限
41
+ RUN chmod +x /usr/local/bin/openclaw-hf-sync && \
42
+ mkdir -p /home/user/.openclaw/workspace && \
43
+ chown -R 1000:1000 /home/user
44
 
45
+ # 设置环境变量
46
+ ENV HOME=/home/user
47
  USER 1000:1000
48
 
49
+ # 使用 tini 启动
50
+ ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/openclaw-hf-sync"]