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

更新 Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +39 -5
Dockerfile CHANGED
@@ -1,22 +1,56 @@
1
  # syntax=docker/dockerfile:1
2
 
3
- FROM rust:1.94.0-bookworm AS builder
 
4
  WORKDIR /app
 
 
 
 
 
 
 
 
5
  COPY Cargo.toml ./
 
 
 
6
  COPY src ./src
7
  RUN cargo build --release
8
 
 
 
 
9
  FROM mcr.microsoft.com/playwright:v1.51.0-jammy AS runtime
10
 
11
- RUN apt-get update \
12
- && apt-get install -y --no-install-recommends ca-certificates tini \
 
 
13
  && rm -rf /var/lib/apt/lists/*
14
 
15
- RUN useradd -m -u 1000 -s /bin/bash user
 
 
16
 
17
- WORKDIR /home/user
 
 
 
 
 
18
  COPY --from=builder /app/target/release/openclaw-entrypoint /usr/local/bin/openclaw-entrypoint
 
 
 
 
 
19
 
 
20
  USER 1000:1000
 
 
21
  ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/openclaw-entrypoint"]
 
 
22
  CMD ["bash"]
 
1
  # syntax=docker/dockerfile:1
2
 
3
+ # --- 阶段 1: 编译 Rust 二进制文件 ---
4
+ FROM rust:1.94.0-slim-bookworm AS builder
5
  WORKDIR /app
6
+
7
+ # 安装编译所需的系统依赖
8
+ RUN apt-get update && apt-get install -y --no-install-recommends \
9
+ pkg-config \
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"]