FROM mcr.microsoft.com/devcontainers/python:1-3.11-bullseye | |
# Install Docker-in-Docker | |
RUN curl -fsSL https://get.docker.com | sh | |
# Install GUI dependencies | |
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | |
&& apt-get -y install --no-install-recommends \ | |
# VNC & GUI | |
tigervnc-standalone-server \ | |
tigervnc-common \ | |
tigervnc-xorg-extension \ | |
dbus-x11 \ | |
# Desktop Environment | |
xfce4 \ | |
xfce4-goodies \ | |
# noVNC | |
novnc \ | |
websockify \ | |
# Browser & Tools | |
firefox-esr \ | |
chromium \ | |
# Utilities | |
x11-apps \ | |
x11-utils \ | |
x11vnc \ | |
xvfb \ | |
&& apt-get autoremove -y && apt-get clean -y | |
# Install Python dependencies | |
COPY requirements.txt /tmp/pip-tmp/ | |
RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \ | |
&& rm -rf /tmp/pip-tmp | |
# Install Playwright browsers | |
RUN pip install playwright \ | |
&& playwright install \ | |
&& playwright install-deps | |
# Setup VNC | |
RUN mkdir -p /home/vscode/.vnc \ | |
&& echo "copilot123" | vncpasswd -f > /home/vscode/.vnc/passwd \ | |
&& chmod 600 /home/vscode/.vnc/passwd \ | |
&& chown -R vscode:vscode /home/vscode/.vnc | |
# Setup noVNC | |
RUN ln -s /usr/share/novnc/vnc.html /usr/share/novnc/index.html | |
# VNC startup script | |
COPY .devcontainer/start-vnc.sh /usr/local/bin/ | |
RUN chmod +x /usr/local/bin/start-vnc.sh | |
# Environment | |
ENV DISPLAY=:1 | |
ENV VNC_PORT=5900 | |
ENV NOVNC_PORT=6080 | |
ENV VNC_RESOLUTION=1920x1080 | |
ENV VNC_PW=copilot123 | |
USER vscode | |
# Xfce configuration | |
RUN mkdir -p /home/vscode/.config/xfce4/xfconf/xfce-perchannel-xml \ | |
&& echo '<?xml version="1.0" encoding="UTF-8"?>\n<channel name="xfce4-desktop" version="1.0">\n <property name="backdrop" type="empty">\n <property name="screen0" type="empty">\n <property name="monitor0" type="empty">\n <property name="workspace0" type="empty">\n <property name="color-style" type="int" value="0"/>\n <property name="image-style" type="int" value="5"/>\n <property name="last-image" type="string" value=""/>\n </property>\n </property>\n </property>\n </property>\n</channel>' > /home/vscode/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml | |
EXPOSE 5900 6080 | |