一、构建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
也不行。
反正影响不大,也就暂时没管。
Comments NOTHING