一、构建docker镜像

1. 创建并进入工作目录

mkdir cloud-chrome-browser
cd ./cloud-chrome-browser

2. 创建Dockerfile文件

FROM ubuntu:20.04

# 预先设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 更新并安装依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        wget \
        gnupg2 \
        ca-certificates \
        unzip \
        curl \
        git \
        && rm -rf /var/lib/apt/lists/*

# 安装 Chrome 浏览器
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list \
    && apt-get update && apt-get install -y google-chrome-stable

# 安装 Xvfb 和其他依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        xvfb \
        x11vnc \
        fluxbox \
        xterm \
        && rm -rf /var/lib/apt/lists/*

# 安装中文支持和字体
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        locales \
        fonts-wqy-zenhei \
        && rm -rf /var/lib/apt/lists/* \
    && locale-gen zh_CN.UTF-8

# 安装 noVNC
RUN mkdir /opt/noVNC && \
    curl -sSL https://github.com/novnc/noVNC/archive/v1.2.0.tar.gz | tar xz --strip 1 -C /opt/noVNC

# 安装 WebSockets
RUN mkdir /opt/websockify && \
    curl -sSL https://github.com/novnc/websockify/archive/v0.10.0.tar.gz | tar xz --strip 1 -C /opt/websockify

# 设置环境变量
ENV DISPLAY=:0 \
    SCREEN_WIDTH=1920 \
    SCREEN_HEIGHT=1080 \
    SCREEN_DEPTH=24 \
    LANG=zh_CN.UTF-8 \
    LANGUAGE=zh_CN:zh \
    LC_ALL=zh_CN.UTF-8

# 创建工作目录
WORKDIR /opt

# 复制启动脚本
COPY start.sh /opt/start.sh
RUN chmod +x /opt/start.sh

# 暴露端口
EXPOSE 8080

# 启动容器
ENTRYPOINT ["/opt/start.sh"]

3. 创建start.sh文件

#!/bin/bash
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
if [ "$CHROME_KIOSK_MODE" = "true" ]; then
  KIOSK_FLAG="--kiosk"
else
  KIOSK_FLAG=""
fi
Xvfb :0 -screen 0 "${SCREEN_WIDTH}x${SCREEN_HEIGHT}x${SCREEN_DEPTH}" &
x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -passwd "${VNC_PASSWORD}" -forever -shared -bg
fluxbox &
google-chrome --no-sandbox --start-maximized --disable-translate --disable-infobars --disable-notifications $KIOSK_FLAG --no-first-run --lang="${CHROME_LANG}" "${CHROME_START_URL:-https://www.google.com}" &
cd /opt/noVNC && ln -s vnc_auto.html index.html && ./utils/launch.sh --vnc localhost:5900 --listen 8080

4. 构建镜像

docker build -t cloud-chrome-browser .

二、启动容器

docker run -d --restart=always --name kujiu-chatgpt -p 8080:8080 \
  -e TZ="Asia/Shanghai" \
  -e SCREEN_WIDTH="1280" \
  -e SCREEN_HEIGHT="720" \
  -e SCREEN_DEPTH="16" \
  -e CHROME_LANG="zh-CN" \
  -e VNC_PASSWORD="password" \
  -e CHROME_START_URL="https://www.google.com" \
  -e CHROME_KIOSK_MODE=true \
  cloud-chrome-browser

或者直接从hub使用我构建好的镜像

docker run -d --restart=always --name kujiu-chatgpt -p 8080:8080 \
  -e TZ="Asia/Shanghai" \
  -e SCREEN_WIDTH="1280" \
  -e SCREEN_HEIGHT="720" \
  -e SCREEN_DEPTH="16" \
  -e CHROME_LANG="zh-CN" \
  -e VNC_PASSWORD="password" \
  -e CHROME_START_URL="https://www.google.com" \
  -e CHROME_KIOSK_MODE=true \
  akumasign/cloud-chrome-browser:latest

三、已知问题

容器重启会起不来,vnc会提示display已被占用。

就算在 start.sh 中加入 rm -f /tmp/.X0-lock 也不行。

反正影响不大,也就暂时没管。

最后更新于 2023-07-15