solar/docker-chrome/Dockerfile

33 lines
2.1 KiB
Docker

# Extend Kasm Chrome so CDP is reachable from other containers.
# Chrome (M113+) binds remote debugging to 127.0.0.1 only; socat forwards 0.0.0.0:9222 -> 127.0.0.1:9223.
FROM kasmweb/chrome:1.18.0-rolling-daily
USER root
RUN apt-get update && apt-get install -y --no-install-recommends socat yad gosu \
&& rm -rf /var/lib/apt/lists/*
COPY entrypoint_root.sh /dockerstartup/entrypoint_root.sh
RUN chmod +x /dockerstartup/entrypoint_root.sh
COPY dockerstartup_wrapper.sh /dockerstartup/dockerstartup_wrapper.sh
COPY cdp_proxy.py /dockerstartup/cdp_proxy.py
# Disable SSL in KasmVNC so nginx (Let's Encrypt) is the only TLS; upstream is plain HTTP.
COPY kasmvnc.yaml /etc/kasmvnc/kasmvnc.yaml
# Startup script hardcodes -sslOnly; remove it so noVNC accepts HTTP when behind our proxy.
RUN sed -i 's/ -sslOnly//g' /dockerstartup/vnc_startup.sh
RUN chmod +x /dockerstartup/dockerstartup_wrapper.sh
# Chrome launcher: desktop shortcut + floating "Open Chrome" button (icons hidden in single-app mode)
COPY launch_chrome.sh /dockerstartup/launch_chrome.sh
COPY chrome_launcher_button.sh /dockerstartup/chrome_launcher_button.sh
COPY open-chrome-launcher.desktop /dockerstartup/open-chrome-launcher.desktop
COPY google-chrome.desktop /dockerstartup/google-chrome.desktop
RUN chmod +x /dockerstartup/launch_chrome.sh /dockerstartup/chrome_launcher_button.sh \
&& mkdir -p /home/kasm-default-profile/.config/autostart /home/kasm-user/Desktop /home/kasm-default-profile/Desktop \
&& cp /dockerstartup/open-chrome-launcher.desktop /home/kasm-default-profile/.config/autostart/ \
&& cp /dockerstartup/google-chrome.desktop /home/kasm-user/Desktop/ \
&& cp /dockerstartup/google-chrome.desktop /home/kasm-default-profile/Desktop/ \
&& chmod +x /home/kasm-user/Desktop/google-chrome.desktop /home/kasm-default-profile/Desktop/google-chrome.desktop \
&& chown -R 1000:0 /home/kasm-default-profile/.config/autostart /home/kasm-user/Desktop /home/kasm-default-profile/Desktop
# Container must start as root so entrypoint can chown the bind-mounted chrome-profile
USER root
ENTRYPOINT ["/dockerstartup/entrypoint_root.sh"]
CMD ["--wait"]