# Build stage FROM debian:13@sha256:fac46bff2e02f51425b6e33b0e1169f55dfb053d83511ca28aa50c09fd5ed7a4 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:3a39a0592364683e6bab97937b72cad5a8fa6dcbbee90edb3bb48c7f8e94f258 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"]