docker/templates/Dockerfile.erb (113 lines of code) (raw):

# This Dockerfile was generated from templates/Dockerfile.erb <%# image_flavor 'full', oss', 'wolfi' -%> <% if local_artifacts == 'false' -%> <% url_root = 'https://artifacts.elastic.co/downloads/logstash' -%> <% else -%> <% url_root = 'http://localhost:8000' -%> <% end -%> <% if image_flavor == 'oss' -%> <% tarball = "logstash-oss-#{elastic_version}-linux-#{arch}.tar.gz" -%> <% license = 'Apache 2.0' -%> <% else -%> <% tarball = "logstash-#{elastic_version}-linux-#{arch}.tar.gz" -%> <% license = 'Elastic License' -%> <% end -%> <% if image_flavor == 'full' || image_flavor == 'oss' -%> <% base_image = 'redhat/ubi9-minimal:latest' -%> <% go_image = 'golang:1.23' -%> <% package_manager = 'microdnf' -%> <% else -%> <% base_image = 'docker.elastic.co/wolfi/chainguard-base' -%> <% go_image = 'docker.elastic.co/wolfi/go:1.23' -%> <% package_manager = 'apk' -%> <% end -%> <% locale = 'C.UTF-8' -%> # Build env2yaml FROM <%= go_image %> AS builder-env2yaml COPY env2yaml/env2yaml.go env2yaml/go.mod env2yaml/go.sum /tmp/go/src/env2yaml/ WORKDIR /tmp/go/src/env2yaml RUN go build -trimpath # Build main image # Minimal distributions do not ship with en language packs. FROM <%= base_image %> ENV ELASTIC_CONTAINER=true ENV PATH=/usr/share/logstash/bin:$PATH ENV LANG=<%= locale %> LC_ALL=<%= locale %> WORKDIR /usr/share # Install packages RUN for iter in {1..10}; do \ <% if image_flavor == 'full' || image_flavor == 'oss' -%> <%= package_manager %> update -y && \ <%= package_manager %> install -y procps findutils tar gzip && \ <%= package_manager %> install -y openssl && \ <%= package_manager %> install -y which shadow-utils && \ <%= package_manager %> clean all && \ <% else -%><%# 'wolfi' -%> <%= package_manager %> add --no-cache curl bash openssl && \ <% end -%> exit_code=0 && break || \ exit_code=$? && echo "packaging error: retry $iter in 10s" && \ <%= package_manager %> clean all && sleep 10; \ done; \ (exit $exit_code) # Provide a non-root user to run the process # Add Logstash itself and set permissions <% if image_flavor == 'full' || image_flavor == 'oss' -%> RUN groupadd --gid 1000 logstash && \ adduser --uid 1000 --gid 1000 \ --home "/usr/share/logstash" \ --no-create-home \ logstash && \ <% else -%><%# 'wolfi' -%> RUN addgroup -g 1000 logstash && \ adduser -u 1000 -G logstash \ --disabled-password \ --gecos "" \ --home "/usr/share/logstash" \ --shell "/sbin/nologin" \ --no-create-home \ logstash && \ <% end -%> curl -Lo - <%= url_root %>/<%= tarball %> | \ tar zxf - -C /usr/share && \ mv /usr/share/logstash-<%= elastic_version %> /usr/share/logstash && \ chown -R logstash:root /usr/share/logstash && \ chmod -R g=u /usr/share/logstash && \ mkdir /licenses && \ mv /usr/share/logstash/NOTICE.TXT /licenses/NOTICE.TXT && \ mv /usr/share/logstash/LICENSE.txt /licenses/LICENSE.txt && \ find /usr/share/logstash -type d -exec chmod g+s {} \; && \ ln -s /usr/share/logstash /opt/logstash COPY --from=builder-env2yaml /tmp/go/src/env2yaml/env2yaml /usr/local/bin/env2yaml COPY --chown=logstash:root config/pipelines.yml config/log4j2.properties config/log4j2.file.properties /usr/share/logstash/config/ <% if image_flavor == 'oss' -%> COPY --chown=logstash:root config/logstash-oss.yml /usr/share/logstash/config/logstash.yml <% else -%><%# 'full', 'wolfi' -%> COPY --chown=logstash:root config/logstash-full.yml /usr/share/logstash/config/logstash.yml <% end -%> COPY --chown=logstash:root pipeline/default.conf /usr/share/logstash/pipeline/logstash.conf COPY --chmod=0755 bin/docker-entrypoint /usr/local/bin/ WORKDIR /usr/share/logstash USER 1000 EXPOSE 9600 5044 LABEL org.label-schema.build-date=<%= created_date %> \ org.label-schema.license="<%= license %>" \ org.label-schema.name="logstash" \ org.label-schema.schema-version="1.0" \ org.label-schema.url="https://www.elastic.co/products/logstash" \ org.label-schema.vcs-url="https://github.com/elastic/logstash" \ org.label-schema.vendor="Elastic" \ org.label-schema.version="<%= elastic_version %>" \ org.opencontainers.image.created=<%= created_date %> \ org.opencontainers.image.description="Logstash is a free and open server-side data processing pipeline that ingests data from a multitude of sources, transforms it, and then sends it to your favorite 'stash.'" \ org.opencontainers.image.licenses="<%= license %>" \ org.opencontainers.image.title="logstash" \ org.opencontainers.image.vendor="Elastic" \ org.opencontainers.image.version="<%= elastic_version %>" \ description="Logstash is a free and open server-side data processing pipeline that ingests data from a multitude of sources, transforms it, and then sends it to your favorite 'stash.'" \ license="<%= license %>" \ maintainer="info@elastic.co" \ name="logstash" \ summary="Logstash is a free and open server-side data processing pipeline that ingests data from a multitude of sources, transforms it, and then sends it to your favorite 'stash.'" \ vendor="Elastic" ENTRYPOINT ["/usr/local/bin/docker-entrypoint"]