The Xvfb readiness loop in entrypoint.sh used xdpyinfo, which isn't in the Playwright base image. On busy hosts the loop fell through before Xvfb was ready, so Chromium launched with no X server and crashed with "Missing X server or \$DISPLAY". Add x11-utils (provides xdpyinfo) and extend the readiness loop to 10 s with explicit logging. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
52 lines
1.1 KiB
Docker
52 lines
1.1 KiB
Docker
# Use the official Playwright image which includes all browser dependencies
|
|
FROM mcr.microsoft.com/playwright:v1.57.0-jammy
|
|
|
|
# Install Xvfb (virtual display), x11vnc (VNC server) and noVNC (web-based VNC client)
|
|
# so a human can log in to Reddit through the dashboard.
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
TZ=Etc/UTC
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
tzdata \
|
|
xvfb \
|
|
x11vnc \
|
|
x11-utils \
|
|
novnc \
|
|
websockify \
|
|
fluxbox \
|
|
procps \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy package files
|
|
COPY package*.json ./
|
|
|
|
# Install dependencies (including devDependencies for building)
|
|
RUN npm ci
|
|
|
|
# Copy source code
|
|
COPY . .
|
|
|
|
# Build the TypeScript project
|
|
RUN npm run build
|
|
|
|
# Create data directory
|
|
RUN mkdir -p data
|
|
|
|
# Copy entrypoint
|
|
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
|
|
|
# Web dashboard
|
|
EXPOSE 3000
|
|
# noVNC (browser-accessible VNC for human login)
|
|
EXPOSE 6080
|
|
|
|
ENV DISPLAY=:99 \
|
|
VNC_DISPLAY_NUM=99 \
|
|
VNC_PORT=5900 \
|
|
NOVNC_PORT=6080 \
|
|
SCREEN_GEOMETRY=1280x800x24
|
|
|
|
CMD ["/usr/local/bin/entrypoint.sh"]
|