mirror of
https://github.com/elastic/logstash.git
synced 2025-04-23 22:27:21 -04:00
This commit adds environment variable LOG_STYLE to control log behavior of docker container `console` - this is the default to output to standout `file` - log to disk. Fixed: #14941
201 lines
7.4 KiB
Django/Jinja
201 lines
7.4 KiB
Django/Jinja
# This Dockerfile was generated from templates/Dockerfile.j2
|
|
{% if local_artifacts == 'false' -%}
|
|
{% set url_root = 'https://artifacts.elastic.co/downloads/logstash' -%}
|
|
{% else -%}
|
|
{% set url_root = 'http://localhost:8000' -%}
|
|
{% endif -%}
|
|
|
|
{% if image_flavor == 'oss' -%}
|
|
{% set tarball = 'logstash-oss-%s-linux-$(arch).tar.gz' % (elastic_version) -%}
|
|
{% set license = 'Apache 2.0' -%}
|
|
{% else -%}
|
|
{% set tarball = 'logstash-%s-linux-$(arch).tar.gz' % (elastic_version) -%}
|
|
{% set license = 'Elastic License' -%}
|
|
{% endif -%}
|
|
|
|
{% if image_flavor == 'ubi8' -%}
|
|
{% set base_image = 'docker.elastic.co/ubi8/ubi-minimal' -%}
|
|
{% set package_manager = 'microdnf' -%}
|
|
# Minimal distributions do not ship with en language packs.
|
|
{% set locale = 'C.UTF-8' -%}
|
|
{% elif image_flavor == 'ironbank' -%}
|
|
{% set package_manager = 'yum' -%}
|
|
{% else -%}
|
|
{% set base_image = 'ubuntu:20.04' -%}
|
|
{% set package_manager = 'apt-get' -%}
|
|
{% set locale = 'en_US.UTF-8' -%}
|
|
{% endif -%}
|
|
|
|
|
|
{% if image_flavor == 'ironbank' -%}
|
|
ARG BASE_REGISTRY=registry1.dsop.io
|
|
ARG BASE_IMAGE=ironbank/redhat/ubi/ubi8
|
|
ARG BASE_TAG=8.7
|
|
ARG LOGSTASH_VERSION={{ elastic_version }}
|
|
ARG GOLANG_VERSION=1.17.8
|
|
|
|
FROM ${BASE_REGISTRY}/${BASE_IMAGE}:${BASE_TAG} AS env2yaml
|
|
|
|
ARG GOLANG_VERSION
|
|
|
|
# install golang
|
|
RUN yum update -y && yum install -y git
|
|
COPY go${GOLANG_VERSION}.linux-amd64.tar.gz /opt/go.tar.gz
|
|
RUN tar -C /usr/local -xzf /opt/go.tar.gz
|
|
ENV PATH=$PATH:/usr/local/go/bin
|
|
|
|
# compile the env2yaml tool
|
|
COPY v2.3.0.tar.gz /opt/env2yaml.tar.gz
|
|
COPY scripts/go /usr/local/src/go
|
|
WORKDIR /usr/local/src/go/src/env2yaml
|
|
RUN mkdir -p vendor/gopkg.in
|
|
RUN tar -zxf /opt/env2yaml.tar.gz -C vendor/gopkg.in
|
|
RUN mv vendor/gopkg.in/yaml-2.3.0 vendor/gopkg.in/yaml.v2
|
|
ENV GOPATH=/usr/local/src/go
|
|
RUN go build -mod vendor
|
|
|
|
# stage 1: unpack logstash
|
|
FROM ${BASE_REGISTRY}/${BASE_IMAGE}:${BASE_TAG} AS builder
|
|
|
|
ARG LOGSTASH_VERSION
|
|
|
|
WORKDIR /usr/share/
|
|
COPY logstash-${LOGSTASH_VERSION}-linux-x86_64.tar.gz /opt/logstash.tar.gz
|
|
|
|
RUN tar zxf /opt/logstash.tar.gz && \
|
|
mv /usr/share/logstash-${LOGSTASH_VERSION} /usr/share/logstash
|
|
|
|
FROM ${BASE_REGISTRY}/${BASE_IMAGE}:${BASE_TAG}
|
|
|
|
{% else -%}
|
|
FROM {{ base_image }}
|
|
|
|
{% endif -%}
|
|
|
|
RUN for iter in {1..10}; do \
|
|
{% if image_flavor == 'full' or image_flavor == 'oss' -%}
|
|
export DEBIAN_FRONTEND=noninteractive && \
|
|
{% endif -%}
|
|
{{ package_manager }} update -y && \
|
|
{% if image_flavor != 'ironbank' -%}
|
|
{{ package_manager }} upgrade -y && \
|
|
{% endif -%}
|
|
{{ package_manager }} install -y procps findutils tar gzip curl && \
|
|
{% if image_flavor == 'ubi8' or image_flavor == 'ironbank' -%}
|
|
{{ package_manager }} install -y which shadow-utils && \
|
|
{% else -%}
|
|
{{ package_manager }} install -y locales && \
|
|
{% endif -%}
|
|
{{ package_manager }} clean all && \
|
|
{% if image_flavor == 'full' or image_flavor == 'oss' -%}
|
|
locale-gen 'en_US.UTF-8' && \
|
|
{{ package_manager }} clean metadata && \
|
|
{% endif -%}
|
|
exit_code=0 && break || exit_code=$? && \
|
|
echo "packaging error: retry $iter in 10s" && \
|
|
{{ package_manager }} clean all && \
|
|
{% if image_flavor == 'full' or image_flavor == 'oss' -%}
|
|
{{ package_manager }} clean metadata && \
|
|
{% endif -%}
|
|
sleep 10; done; \
|
|
(exit $exit_code)
|
|
|
|
# Provide a non-root user to run the process.
|
|
RUN groupadd --gid 1000 logstash && \
|
|
adduser --uid 1000 --gid 1000 \
|
|
{% if image_flavor != 'ironbank' %} --home {% else %} --home-dir {% endif -%} /usr/share/logstash --no-create-home \
|
|
logstash
|
|
|
|
{% if image_flavor == 'ironbank' -%}
|
|
WORKDIR /usr/share/logstash
|
|
COPY --from=env2yaml /usr/local/src/go/src/env2yaml/env2yaml /usr/local/bin/env2yaml
|
|
COPY --from=builder --chown=1000:0 /usr/share/logstash /usr/share/logstash
|
|
{% endif -%}
|
|
|
|
# Add Logstash itself.
|
|
RUN \
|
|
{% if image_flavor != 'ironbank' -%} curl -Lo - {{ url_root }}/{{ tarball }} | \
|
|
tar zxf - -C /usr/share && \
|
|
mv /usr/share/logstash-{{ elastic_version }} /usr/share/logstash && \
|
|
{% endif -%}
|
|
chown --recursive logstash:logstash /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 && \
|
|
{% if image_flavor != 'ironbank' -%} find /usr/share/logstash -type d -exec chmod g+s {} \; && \
|
|
{% endif -%}
|
|
ln -s /usr/share/logstash /opt/logstash
|
|
|
|
{% if image_flavor != 'ironbank' -%}
|
|
WORKDIR /usr/share/logstash
|
|
{% endif -%}
|
|
ENV ELASTIC_CONTAINER true
|
|
ENV PATH=/usr/share/logstash/bin:$PATH
|
|
|
|
# Provide a minimal configuration, so that simple invocations will provide
|
|
# a good experience.
|
|
{% if image_flavor != 'ironbank' -%}
|
|
COPY config/pipelines.yml config/pipelines.yml
|
|
{% if image_flavor == 'oss' -%}
|
|
COPY config/logstash-oss.yml config/logstash.yml
|
|
{% else -%}
|
|
COPY config/logstash-full.yml config/logstash.yml
|
|
{% endif -%}
|
|
COPY config/log4j2.properties config/
|
|
COPY config/log4j2.file.properties config/
|
|
COPY pipeline/default.conf pipeline/logstash.conf
|
|
RUN chown --recursive logstash:root config/ pipeline/
|
|
# Ensure Logstash gets the correct locale by default.
|
|
ENV LANG={{ locale }} LC_ALL={{ locale }}
|
|
COPY env2yaml/env2yaml /usr/local/bin/
|
|
# Place the startup wrapper script.
|
|
COPY bin/docker-entrypoint /usr/local/bin/
|
|
{% else -%}
|
|
COPY scripts/config/pipelines.yml config/pipelines.yml
|
|
COPY scripts/config/logstash.yml config/logstash.yml
|
|
COPY scripts/config/log4j2.properties config/
|
|
COPY scripts/config/log4j2.file.properties config/
|
|
COPY scripts/pipeline/default.conf pipeline/logstash.conf
|
|
RUN chown --recursive logstash:root config/ pipeline/
|
|
# Place the startup wrapper script.
|
|
COPY scripts/bin/docker-entrypoint /usr/local/bin/
|
|
{% endif -%}
|
|
|
|
RUN chmod 0755 /usr/local/bin/docker-entrypoint
|
|
|
|
USER 1000
|
|
|
|
EXPOSE 9600 5044
|
|
|
|
{% if image_flavor != 'ironbank' -%}
|
|
LABEL org.label-schema.schema-version="1.0" \
|
|
org.label-schema.vendor="Elastic" \
|
|
org.opencontainers.image.vendor="Elastic" \
|
|
org.label-schema.name="logstash" \
|
|
org.opencontainers.image.title="logstash" \
|
|
org.label-schema.version="{{ elastic_version }}" \
|
|
org.opencontainers.image.version="{{ elastic_version }}" \
|
|
org.label-schema.url="https://www.elastic.co/products/logstash" \
|
|
org.label-schema.vcs-url="https://github.com/elastic/logstash" \
|
|
org.label-schema.license="{{ license }}" \
|
|
org.opencontainers.image.licenses="{{ license }}" \
|
|
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.label-schema.build-date={{ created_date }} \
|
|
{% if image_flavor == 'ubi8' -%}
|
|
license="{{ license }}" \
|
|
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.'" \
|
|
name="logstash" \
|
|
maintainer="info@elastic.co" \
|
|
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" \
|
|
{% endif -%}
|
|
org.opencontainers.image.created={{ created_date }}
|
|
{% endif -%}
|
|
|
|
{% if image_flavor == 'ironbank' -%}
|
|
HEALTHCHECK --interval=10s --timeout=5s --start-period=1m --retries=5 CMD curl -I -f --max-time 5 http://localhost:9600 || exit 1
|
|
{% endif -%}
|
|
|
|
ENTRYPOINT ["/usr/local/bin/docker-entrypoint"]
|