# Build stage FROM debian:13@sha256:9c6e381421d0f48d1b8133e573f33c185ee16cbf505eda9c4a8a4791b25ea8a6 AS builder RUN apt-get update && apt-get install -y \ build-essential \ cmake \ git \ libcurl4-gnutls-dev \ liblzma-dev \ liblzo2-dev \ libpng-dev \ libzstd-dev \ zlib1g-dev \ pkg-config \ && rm -rf /var/lib/apt/lists/* WORKDIR /src COPY OpenTTD-patches /src/OpenTTD-patches WORKDIR /src/OpenTTD-patches/build RUN cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DOPTION_DEDICATED=ON \ -DOPTION_INSTALL_HTML_DOCS=OFF \ -DOPTION_USE_ASSERTS=OFF \ && make -j$(nproc) install # Runtime stage # Must track the builder's Debian release: the builder (debian:13/trixie) links # against glibc 2.38+, so an older runtime (e.g. bookworm, glibc 2.36) cannot run # the resulting binary. Package names use the trixie t64 spelling. FROM debian:trixie-slim@sha256:f6b08b09a05725f9431502d3b5714f5c4576e82c1a84fa1debe0c24a7e0c3ec4 RUN apt-get update && apt-get install -y \ libcurl3t64-gnutls \ liblzma5 \ liblzo2-2 \ libpng16-16t64 \ libzstd1 \ zlib1g \ ca-certificates \ openttd-opengfx \ && rm -rf /var/lib/apt/lists/* # Copy binaries from builder COPY --from=builder /usr/local/games/openttd /usr/local/bin/openttd COPY --from=builder /usr/local/share/games/openttd /usr/local/share/games/openttd # Ensure base graphics are in a path openttd searches RUN mkdir -p /usr/local/share/games/openttd/baseset && \ cp -r /usr/share/games/openttd/baseset/* /usr/local/share/games/openttd/baseset/ # Create openttd user RUN useradd -m -u 1000 openttd USER openttd WORKDIR /home/openttd # Create config directory RUN mkdir -p /home/openttd/.local/share/openttd/save EXPOSE 3979/tcp 3979/udp 3977/tcp CMD ["openttd", "-D"]