ARG BASE_IMAGE=docker.io/library/ubuntu:26.04@sha256:2260313b31c8c011cd2eebe728008efac1b3982be73eb71348ea2648d2c0e09b #################################################################################################### # Builder image # Initial stage which pulls prepares build dependencies and CLI tooling we need for our final image # Also used as the image in CI jobs so needs all dependencies #################################################################################################### FROM docker.io/library/golang:1.27.3@sha256:f24164268fc1e741bbdc0066dbadcf1c8426c5a8489f0729c02c3905a53032fd AS builder WORKDIR /tmp # renovate: datasource=deb depName=git registryUrl=https://deb.debian.org/debian?suite=trixie&components=main,security&binaryArch=amd64 ARG GIT_APT_VERSION=1:2.47.3-0+deb13u1 RUN apt-get update && apt-get install --no-install-recommends -y \ openssh-server \ nginx \ unzip \ fcgiwrap \ git=${GIT_APT_VERSION} \ make \ wget \ gcc \ sudo \ zip && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY hack/install.sh hack/tool-versions.sh ./ COPY hack/installers installers RUN ./install.sh helm && \ INSTALL_PATH=/usr/local/bin ./install.sh kustomize && \ ./install.sh git-lfs #################################################################################################### # Argo CD Base - used as the base for both the release and dev argocd images #################################################################################################### FROM $BASE_IMAGE AS argocd-base LABEL org.opencontainers.image.source="https://github.com/argoproj/argo-cd" USER root ENV ARGOCD_USER_ID=999 \ DEBIAN_FRONTEND=noninteractive # renovate: datasource=deb depName=git registryUrl=https://archive.ubuntu.com/ubuntu?suite=resolute&components=main,security&binaryArch=amd64 ARG GIT_APT_VERSION=1:2.53.0-1ubuntu1 RUN groupadd -g $ARGOCD_USER_ID argocd && \ useradd -r -u $ARGOCD_USER_ID -g argocd argocd && \ mkdir -p /home/argocd && \ chown argocd:0 /home/argocd && \ chmod g=u /home/argocd && \ apt-get update && \ apt-get dist-upgrade -y && \ apt-get install --no-install-recommends -y \ git=${GIT_APT_VERSION} tini ca-certificates gpg gpg-agent tzdata connect-proxy openssh-client && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* COPY hack/gpg-wrapper.sh \ hack/git-verify-wrapper.sh \ entrypoint.sh \ /usr/local/bin/ COPY --from=builder /usr/local/bin/helm /usr/local/bin/helm COPY --from=builder /usr/local/bin/kustomize /usr/local/bin/kustomize COPY --from=builder /usr/local/bin/git-lfs /usr/local/bin/git-lfs # Initialize git-lfs system configuration (/etc/gitconfig) so LFS filters are active # The --skip-repo option prevents failure if / is a Git repository with existing # non-git-lfs hooks. RUN git lfs install --skip-repo --system # keep uid_entrypoint.sh for backward compatibility RUN ln -s /usr/local/bin/entrypoint.sh /usr/local/bin/uid_entrypoint.sh # support for mounting configuration from a configmap WORKDIR /app/config/ssh RUN touch ssh_known_hosts && \ ln -s /app/config/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts WORKDIR /app/config RUN mkdir -p tls && \ mkdir -p gpg/source && \ mkdir -p gpg/keys && \ chown argocd gpg/keys && \ chmod 0700 gpg/keys ENV USER=argocd # Disable gRPC service config lookups via DNS TXT records to prevent excessive # DNS queries for _grpc_config. which can cause timeouts in dual-stack # environments. This can be overridden via argocd-cmd-params-cm ConfigMap. # See https://github.com/argoproj/argo-cd/issues/24991 ENV GRPC_ENABLE_TXT_SERVICE_CONFIG=false USER $ARGOCD_USER_ID WORKDIR /home/argocd #################################################################################################### # Argo CD UI stage #################################################################################################### FROM --platform=$BUILDPLATFORM docker.io/library/node:24.22.1@sha256:5630d96570d4ca4a8523fda3d169d0114554d0f48293e1ae3db6be7c79b42a17 AS argocd-ui WORKDIR /src COPY ["ui/package.json", "ui/pnpm-lock.yaml", "ui/pnpm-workspace.yaml", "./"] RUN npm install -g corepack@0.34.6 && corepack enable && pnpm install --frozen-lockfile COPY ["ui/", "."] ARG ARGO_VERSION=latest ENV ARGO_VERSION=$ARGO_VERSION # Note: the UI bundle is architecture-independent. Keep this stage free of any # per-target-arch inputs (e.g. TARGETARCH) so buildx builds it once and copies an # identical dist into every per-arch image. Otherwise the bundle's contenthash # diverges across archs and mixed-arch clusters serve mismatched asset filenames. RUN NODE_ENV='production' NODE_ONLINE_ENV='online' NODE_OPTIONS=--max_old_space_size=8192 pnpm build #################################################################################################### # Argo CD Build stage which performs the actual build of Argo CD binaries #################################################################################################### FROM --platform=$BUILDPLATFORM docker.io/library/golang:1.27.3@sha256:f24164268fc1e741bbdc0066dbadcf1c8426c5a8489f0729c02c3905a53032fd AS argocd-build WORKDIR /go/src/github.com/argoproj/argo-cd COPY go.* ./ RUN mkdir -p gitops-engine COPY gitops-engine/go.* ./gitops-engine RUN go mod download # Perform the build COPY . . COPY --from=argocd-ui /src/dist/app /go/src/github.com/argoproj/argo-cd/ui/dist/app ARG TARGETOS \ TARGETARCH # These build args are optional; if not specified the defaults will be taken from the Makefile ARG GIT_TAG \ BUILD_DATE \ GIT_TREE_STATE \ GIT_COMMIT RUN GIT_COMMIT=$GIT_COMMIT \ GIT_TREE_STATE=$GIT_TREE_STATE \ GIT_TAG=$GIT_TAG \ BUILD_DATE=$BUILD_DATE \ GOOS=$TARGETOS \ GOARCH=$TARGETARCH \ make argocd-all #################################################################################################### # Final image #################################################################################################### FROM argocd-base ENTRYPOINT ["/usr/bin/tini", "--"] COPY --from=argocd-build /go/src/github.com/argoproj/argo-cd/dist/argocd* /usr/local/bin/ USER root RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-server && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-repo-server && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-cmp-server && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-application-controller && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-dex && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-notifications && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-applicationset-controller && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-k8s-auth && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-commit-server USER $ARGOCD_USER_ID