Files
windmill/docker/DockerfileFull
T
Ruben Fiszel 2b1ee01b42 docs(worker): fix stale comments after per-job/auto-detect refactor
Comment-only cleanup flagged in review:
- PerJobPodman struct doc: it's used for docker jobs in ANY sandbox mode (not just
  nsjail), and teardown is `podman system reset` (removes images + subuid-owned
  layers), not `rm -af` + kill service.
- connect_docker / handle_docker_job param comments: drop the "(nsjail path)" — per-job
  podman runs in all modes now.
- DockerfileFull/FullEe: the container_runtime config was removed; podman is started
  automatically when no Docker daemon is provided.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 14:54:03 +00:00

67 lines
3.2 KiB
Plaintext

FROM ghcr.io/windmill-labs/windmill:dev
# Rust
COPY --from=rust:1.93.0 /usr/local/cargo /usr/local/cargo
COPY --from=rust:1.93.0 /usr/local/rustup /usr/local/rustup
RUN RUSTUP_HOME=/usr/local/rustup CARGO_HOME=/usr/local/cargo /usr/local/cargo/bin/cargo install cargo-sweep --version ^0.7
# Ansible
RUN uv tool install ansible && [ -d "$(uv tool dir)/ansible/bin/" ] && find "$(uv tool dir)/ansible/bin/" -mindepth 1 -maxdepth 1 -type f -executable -regextype posix-extended -regex '^((.+/)?)[^.]+' -print0 | xargs -0 ln -s -t "$UV_TOOL_BIN_DIR/" || true
# C#
RUN wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh \
&& chmod +x dotnet-install.sh \
&& ./dotnet-install.sh --channel 9.0 --install-dir /usr/share/dotnet \
&& ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \
&& rm dotnet-install.sh
# Nushell
COPY --from=ghcr.io/nushell/nushell:0.101.0-bookworm /usr/bin/nu /usr/bin/nu
# Java
RUN apt-get -y update && apt-get install -y default-jdk
RUN curl -fLo coursier https://github.com/coursier/coursier/releases/download/v2.1.24/coursier \
&& mv ./coursier /usr/bin/coursier \
&& chmod +x /usr/bin/coursier
RUN /usr/bin/java -jar /usr/bin/coursier about
# Ruby
RUN apt-get install -y ruby ruby-bundler
# R
RUN apt-get install -y r-base-dev \
&& Rscript -e 'install.packages("renv", lib="/usr/lib/R/library", repos="https://cloud.r-project.org")'
# Rootless container runtime (podman) for docker-mode jobs. When a `# docker` job
# runs on a worker with no Docker daemon provided (no DOCKER_HOST, no mounted
# /var/run/docker.sock), Windmill automatically starts a per-job rootless podman —
# no privileged dind sidecar or host Docker socket. Run the docker worker group as
# `user: "1000:1000"` for a rootless (unprivileged) daemon; running as root still
# works but is rootful (less isolated).
RUN apt-get -y update \
&& apt-get install -y --no-install-recommends \
podman \
uidmap \
fuse-overlayfs \
slirp4netns \
crun \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -u 1000 -m -s /bin/bash windmill 2>/dev/null || true
# Ensure a subuid/subgid range exists for rootless podman (useradd usually adds
# one already; only append if it didn't, to avoid a duplicate range).
RUN grep -q '^windmill:' /etc/subuid || echo "windmill:100000:65536" >> /etc/subuid; \
grep -q '^windmill:' /etc/subgid || echo "windmill:100000:65536" >> /etc/subgid
# newuidmap/newgidmap need privilege to map the subuid range for rootless podman;
# ensure they are setuid in case the package's file capabilities are lost in the
# image layers.
RUN chmod u+s /usr/bin/newuidmap /usr/bin/newgidmap
# Default rootless container networking to slirp4netns: the netavark bridge default
# (newer podman) fails rootless on hosts without the required nftables setup.
RUN mkdir -p /etc/containers/containers.conf.d \
&& printf '[containers]\nnetns = "slirp4netns"\n' > /etc/containers/containers.conf.d/01-windmill.conf
# Fix UV cache permissions for non-root user support (uid 1000, etc.)
# The uv tool install ansible command populates the UV cache with root-owned files
RUN chmod -R a+rw /tmp/windmill/cache/uv && \
find /tmp/windmill/cache/uv -type d -exec chmod 777 {} +