Pikilap commited on
Commit
b1bf74d
·
verified ·
1 Parent(s): 0ab466c

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +73 -157
Dockerfile CHANGED
@@ -1,5 +1,4 @@
1
  FROM ubuntu:22.04
2
-
3
  SHELL ["/bin/bash", "-o", "pipefail", "-c"]
4
 
5
  ENV DEBIAN_FRONTEND=noninteractive \
@@ -15,7 +14,7 @@ ENV DEBIAN_FRONTEND=noninteractive \
15
  ZSH=/root/.oh-my-zsh
16
 
17
  # ------------------------------------------------------------
18
- # 1) 基础系统 + 所有工具链 + Playwright/Chromium 依赖 + zsh
19
  # ------------------------------------------------------------
20
  RUN apt-get update && apt-get install -y --no-install-recommends \
21
  ca-certificates curl wget git git-lfs sudo \
@@ -32,141 +31,60 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
32
  python3 python3-pip python3-venv python3-dev python-is-python3 \
33
  libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \
34
  libncurses5-dev libncursesw5-dev libffi-dev liblzma-dev \
35
- libxml2-dev libxslt1-dev libjpeg-dev libpng-dev libtiff-dev libopenjp2-7-dev libwebp-dev \
36
- libmagic-dev \
37
- ffmpeg tesseract-ocr \
38
- fontconfig fonts-liberation fonts-noto-cjk fonts-noto-color-emoji \
39
- iptables uidmap slirp4netns fuse-overlayfs \
40
- libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 \
41
- libdbus-1-3 libdrm2 libexpat1 libgbm1 libgcc-s1 libglib2.0-0 libgtk-3-0 \
42
- libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 \
43
- libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 \
44
- libxfixes3 libxi6 libxkbcommon0 libxrandr2 libxrender1 libxshmfence1 libxss1 libxtst6 \
45
- libatspi2.0-0 \
46
- libwayland-client0 libwayland-cursor0 libwayland-egl1 libwayland-server0 \
47
- && locale-gen en_US.UTF-8 \
48
- && update-locale LANG=en_US.UTF-8 \
49
- && rm -rf /var/lib/apt/lists/*
50
-
51
- # ------------------------------------------------------------
52
- # 2) Docker Engine (dockerd + cli) - rootless 依赖也装上
53
- # ------------------------------------------------------------
54
- RUN install -m 0755 -d /etc/apt/keyrings \
55
- && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
56
- && chmod a+r /etc/apt/keyrings/docker.gpg \
57
- && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" \
58
- > /etc/apt/sources.list.d/docker.list \
59
- && apt-get update \
60
- && apt-get install -y --no-install-recommends \
61
- docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \
62
- && rm -rf /var/lib/apt/lists/*
63
-
64
- # ------------------------------------------------------------
65
- # 3) Node.js v25 (最新版本)
66
- # ------------------------------------------------------------
67
- RUN set -eux; \
68
- arch="$(dpkg --print-architecture)"; \
69
- case "$arch" in \
70
- amd64) node_arch="x64" ;; \
71
- arm64) node_arch="arm64" ;; \
72
- *) echo "Unsupported architecture: $arch" >&2; exit 1 ;; \
73
- esac; \
74
- NODE_VERSION=$(curl -fsSL https://nodejs.org/dist/latest-v25.x/ | grep -oP 'href="node-v25\.\d+\.\d+-linux-'${node_arch}'\.tar\.xz"' | head -1 | grep -oP 'v25\.\d+\.\d+'); \
75
- if [ -z "$NODE_VERSION" ]; then NODE_VERSION="v25.0.0"; fi; \
76
- echo "Installing Node.js $NODE_VERSION"; \
77
- curl -fsSL "https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-${node_arch}.tar.xz" -o node.tar.xz; \
78
- tar -xJf node.tar.xz -C /usr/local --strip-components=1 --no-same-owner; \
79
- rm node.tar.xz; \
80
- node -v; npm -v; \
81
- npm config set update-notifier false; \
82
- npm i -g npm@latest; \
83
- npm cache clean --force
84
-
85
- # ------------------------------------------------------------
86
- # 4) code-server
87
- # ------------------------------------------------------------
88
- RUN curl -fsSL https://code-server.dev/install.sh | sh
89
-
90
- # ------------------------------------------------------------
91
- # 5) Playwright (Python) + Chromium
92
- # ------------------------------------------------------------
93
- RUN mkdir -p "${PLAYWRIGHT_BROWSERS_PATH}" \
94
- && python3 -m pip install --no-cache-dir -U pip setuptools wheel \
95
- && python3 -m pip install --no-cache-dir playwright \
96
- && python3 -m playwright install chromium \
97
- && python3 -m playwright install-deps chromium \
98
- && rm -rf /root/.cache/pip /var/lib/apt/lists/*
99
-
100
- # Optional: Google Chrome (amd64 only)
101
- RUN set -eux; \
102
- arch="$(dpkg --print-architecture)"; \
103
- if [ "$arch" = "amd64" ]; then \
104
- install -m 0755 -d /etc/apt/keyrings; \
105
- curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor -o /etc/apt/keyrings/google-chrome.gpg; \
106
- chmod a+r /etc/apt/keyrings/google-chrome.gpg; \
107
- echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" \
108
- > /etc/apt/sources.list.d/google-chrome.list; \
109
- apt-get update; \
110
- apt-get install -y --no-install-recommends google-chrome-stable; \
111
- rm -rf /var/lib/apt/lists/*; \
112
- fi
113
-
114
- # ------------------------------------------------------------
115
  # 6) oh-my-zsh + 高级主题配置
116
- # 左侧:用户名 + 路径(智能缩短)
117
- # 右侧:时间
118
- # 使用 Powerlevel10k 的精简模式,自动适配颜色,无emoji
119
  # ------------------------------------------------------------
120
  RUN git clone --depth=1 https://github.com/ohmyzsh/ohmyzsh.git "${ZSH}" \
121
  && git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions "${ZSH}/custom/plugins/zsh-autosuggestions" \
122
  && git clone --depth=1 https://github.com/zsh-users/zsh-syntax-highlighting "${ZSH}/custom/plugins/zsh-syntax-highlighting"
123
 
124
- # 创建自定义主题:使用 zsh 原生颜色系统,自动适应终端
125
  RUN mkdir -p "${ZSH}/custom/themes" \
126
  && cat > "${ZSH}/custom/themes/pure-minimal.zsh-theme" <<'THEME'
127
- # pure-minimal: 自动适应终端配色,无emoji,左右分离
128
  # 左侧: user@host dir
129
- # 右侧: time
130
 
131
- # 检测是否为 root
132
  local user_color='%F{green}'
133
- if [[ $EUID -eq 0 ]]; then
134
- user_color='%F{red}'
135
- fi
136
 
137
- # 左侧: 用户名@主机名 路径
138
- # %n=用户名, %m=主机名(短), %~=当前路径(家目录显示为~)
139
- PROMPT='${user_color}%n@%m%f %F{cyan}%~%f %# '
140
 
141
- # 右侧: 时间 HH:MM:SS
142
- RPROMPT='%F{240}%*%f'
143
 
144
- # 输入命令后主提示符(第二行)
 
 
 
 
 
 
145
  PROMPT2='%F{yellow}...%f %# '
146
 
147
- # 终端标题
148
  precmd() { print -Pn "\e]0;%n@%m: %~\a" }
149
  THEME
150
 
151
  RUN cat > /root/.zshrc <<'EOF'
152
- # Oh My Zsh 配置
153
  export ZSH="$HOME/.oh-my-zsh"
154
-
155
- # 禁用自动更新提示
156
  zstyle ':omz:update' mode disabled
157
  export ZSH_DISABLE_COMPFIX=true
158
 
159
- # 主题
160
  ZSH_THEME="pure-minimal"
161
 
162
- # 插件
163
  plugins=(
164
- git
165
- docker
166
- docker-compose
167
- zsh-autosuggestions
168
- zsh-syntax-highlighting
169
- command-not-found
170
  )
171
 
172
  source "$ZSH/oh-my-zsh.sh"
@@ -188,13 +106,15 @@ alias pip='pip3'
188
  alias zshconfig='nano ~/.zshrc'
189
  alias cls='clear'
190
  alias reload='source ~/.zshrc'
 
 
191
 
192
  # 自动补全优化
193
  autoload -Uz compinit
194
  compinit -C
195
 
196
- # zsh-autosuggestions 绑定
197
- bindkey '^ ' autosuggest-accept # Ctrl+空格接受建议
198
  EOF
199
 
200
  # ------------------------------------------------------------
@@ -210,18 +130,17 @@ EOF
210
 
211
  RUN cat > /root/.local/share/code-server/User/settings.json <<'EOF'
212
  {
213
- "workbench.startupEditor": "none",
214
- "telemetry.telemetryLevel": "off",
215
- "update.mode": "none",
216
- "extensions.autoCheckUpdates": false,
217
- "extensions.autoUpdate": false,
218
- "security.workspace.trust.enabled": false,
219
-
220
- "terminal.integrated.defaultProfile.linux": "zsh",
221
- "terminal.integrated.profiles.linux": {
222
- "zsh": { "path": "/usr/bin/zsh" },
223
- "bash": { "path": "/bin/bash" }
224
- }
225
  }
226
  EOF
227
 
@@ -244,50 +163,47 @@ set -euo pipefail
244
  export HOME="${HOME:-/root}"
245
  export PORT="${PORT:-7860}"
246
 
247
- # 尝试启动 Docker 守护进程(HF Spaces 可能不支持,但不影响主服务)
248
  if command -v dockerd >/dev/null 2>&1; then
249
- if ! docker info >/dev/null 2>&1 2>/dev/null; then
250
- mkdir -p /var/log /var/run /var/lib/docker
251
-
252
- echo "[start] attempting to start dockerd..."
253
-
254
- # 尝试多种启动方式
255
- (
256
- # 方式1: 直接启动(需要特权)
257
- dockerd --host=unix:///var/run/docker.sock \
258
- --data-root=/var/lib/docker \
259
- --storage-driver=vfs \
260
- 2>/var/log/dockerd.log &
261
- ) 2>/dev/null || true
262
-
263
- # 等待 docker 就绪(最多5秒)
264
- for i in {1..10}; do
265
- if docker info >/dev/null 2>&1 2>/dev/null; then
266
- echo "[start] dockerd is ready"
267
- break
268
- fi
269
- sleep 0.5
270
- done
271
-
272
  if ! docker info >/dev/null 2>&1 2>/dev/null; then
273
- echo "[start] dockerd failed to start (expected in many container environments)"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
  fi
275
- fi
276
  fi
277
 
278
  mkdir -p /workspace
279
  echo "[start] starting code-server on port ${PORT}"
280
-
281
  exec code-server \
282
- --bind-addr "0.0.0.0:${PORT}" \
283
- --auth none \
284
- --disable-telemetry \
285
- --disable-update-check \
286
- /workspace
287
  EOF
288
 
289
  RUN chmod +x /usr/local/bin/start.sh
290
 
291
  WORKDIR /workspace
292
  EXPOSE 7860
293
- CMD ["/usr/local/bin/start.sh"]
 
1
  FROM ubuntu:22.04
 
2
  SHELL ["/bin/bash", "-o", "pipefail", "-c"]
3
 
4
  ENV DEBIAN_FRONTEND=noninteractive \
 
14
  ZSH=/root/.oh-my-zsh
15
 
16
  # ------------------------------------------------------------
17
+ # 1) 基础系统 + 工具链 + Playwright/Chromium 依赖 + zsh
18
  # ------------------------------------------------------------
19
  RUN apt-get update && apt-get install -y --no-install-recommends \
20
  ca-certificates curl wget git git-lfs sudo \
 
31
  python3 python3-pip python3-venv python3-dev python-is-python3 \
32
  libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \
33
  libncurses5-dev libncursesw5-dev libffi-dev liblzma-dev \
34
+ libxml2-dev libxslt1-dev libjpeg-dev libpng-dev libtiff-dev libopenjp2-7-dev libwebp-emoji \
35
+ iptables uidmap slir ------------------------------------------------------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  # 6) oh-my-zsh + 高级主题配置
37
+ # 左侧:用户名 + 路径(智能缩短)
38
+ # 右侧:时间
39
+ # 使用终端自动配色,无 emoji,无硬编码背景色
40
  # ------------------------------------------------------------
41
  RUN git clone --depth=1 https://github.com/ohmyzsh/ohmyzsh.git "${ZSH}" \
42
  && git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions "${ZSH}/custom/plugins/zsh-autosuggestions" \
43
  && git clone --depth=1 https://github.com/zsh-users/zsh-syntax-highlighting "${ZSH}/custom/plugins/zsh-syntax-highlighting"
44
 
 
45
  RUN mkdir -p "${ZSH}/custom/themes" \
46
  && cat > "${ZSH}/custom/themes/pure-minimal.zsh-theme" <<'THEME'
47
+ # pure-minimal: 自动适应终端配色,无emoji,简洁高效
48
  # 左侧: user@host dir
49
+ # 右侧: 时间
50
 
51
+ # 用户颜色:root红色,普通用户绿色
52
  local user_color='%F{green}'
53
+ [[ $EUID -eq 0 ]] && user_color='%F{red}'
 
 
54
 
55
+ # 路径颜色:青色
56
+ local path_color='%F{cyan}'
 
57
 
58
+ # 时间颜色:灰色(240)
59
+ local time_color='%F{240}'
60
 
61
+ # 主提示符:用户名@主机名 当前目录
62
+ PROMPT='${user_color}%n@%m%f ${path_color}%~%f %# '
63
+
64
+ # 右侧时间:HH:MM:SS
65
+ RPROMPT='${time_color}%*%f'
66
+
67
+ # 多行提示符
68
  PROMPT2='%F{yellow}...%f %# '
69
 
70
+ # 终端标题栏显示用户@主机:路径
71
  precmd() { print -Pn "\e]0;%n@%m: %~\a" }
72
  THEME
73
 
74
  RUN cat > /root/.zshrc <<'EOF'
 
75
  export ZSH="$HOME/.oh-my-zsh"
 
 
76
  zstyle ':omz:update' mode disabled
77
  export ZSH_DISABLE_COMPFIX=true
78
 
 
79
  ZSH_THEME="pure-minimal"
80
 
 
81
  plugins=(
82
+ git
83
+ docker
84
+ docker-compose
85
+ zsh-autosuggestions
86
+ zsh-syntax-highlighting
87
+ command-not-found
88
  )
89
 
90
  source "$ZSH/oh-my-zsh.sh"
 
106
  alias zshconfig='nano ~/.zshrc'
107
  alias cls='clear'
108
  alias reload='source ~/.zshrc'
109
+ alias d='docker'
110
+ alias dc='docker compose'
111
 
112
  # 自动补全优化
113
  autoload -Uz compinit
114
  compinit -C
115
 
116
+ # zsh-autosuggestions 快捷键:Ctrl+空格 接受建议
117
+ bindkey '^ ' autosuggest-accept
118
  EOF
119
 
120
  # ------------------------------------------------------------
 
130
 
131
  RUN cat > /root/.local/share/code-server/User/settings.json <<'EOF'
132
  {
133
+ "workbench.startupEditor": "none",
134
+ "telemetry.telemetryLevel": "off",
135
+ "update.mode": "none",
136
+ "extensions.autoCheckUpdates": false,
137
+ "extensions.autoUpdate": false,
138
+ "security.workspace.trust.enabled": false,
139
+ "terminal.integrated.defaultProfile.linux": "zsh",
140
+ "terminal.integrated.profiles.linux": {
141
+ "zsh": { "path": "/usr/bin/zsh" },
142
+ "bash": { "path": "/bin/bash" }
143
+ }
 
144
  }
145
  EOF
146
 
 
163
  export HOME="${HOME:-/root}"
164
  export PORT="${PORT:-7860}"
165
 
166
+ # 尝试启动 Docker 守护进程(HF Spaces 可能不支持特权,但不影响主服务)
167
  if command -v dockerd >/dev/null 2>&1; then
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  if ! docker info >/dev/null 2>&1 2>/dev/null; then
169
+ mkdir -p /var/log /var/run /var/lib/docker
170
+ echo "[start] attempting to start dockerd..."
171
+
172
+ # 尝试启动 dockerd
173
+ (
174
+ dockerd --host=unix:///var/run/docker.sock \
175
+ --data-root=/var/lib/docker \
176
+ --storage-driver=vfs \
177
+ 2>/var/log/dockerd.log &
178
+ ) 2>/dev/null || true
179
+
180
+ # 等待 docker 就绪(最多5秒)
181
+ for i in {1..10}; do
182
+ if docker info >/dev/null 2>&1 2>/dev/null; then
183
+ echo "[start] dockerd is ready"
184
+ break
185
+ fi
186
+ sleep 0.5
187
+ done
188
+
189
+ if ! docker info >/dev/null 2>&1 2>/dev/null; then
190
+ echo "[start] dockerd not available (expected in restricted environments)"
191
+ fi
192
  fi
 
193
  fi
194
 
195
  mkdir -p /workspace
196
  echo "[start] starting code-server on port ${PORT}"
 
197
  exec code-server \
198
+ --bind-addr "0.0.0.0:${PORT}" \
199
+ --auth none \
200
+ --disable-telemetry \
201
+ --disable-update-check \
202
+ /workspace
203
  EOF
204
 
205
  RUN chmod +x /usr/local/bin/start.sh
206
 
207
  WORKDIR /workspace
208
  EXPOSE 7860
209
+ CMD ["/usr/local/bin/start.sh"]