@@ -41,15 +41,15 @@ RUN chmod 0555 /bin/tini
4141<% } else { %> 
4242
4343# Install required packages to extract the Elasticsearch distribution 
44- <% if (docker_base == ' default' || docker_base == '  cloud ' ) { %>
44+ <% if (docker_base == ' default') { %> 
4545RUN <%= retry.loop(package_manager, "${package_manager} update && DEBIAN_FRONTEND=noninteractive ${package_manager} install -y curl ") %> 
46- <% } else if (docker_base == "wolfi") { %> 
46+ <% } else if (docker_base == "wolfi" || docker_base == "fips" ) { %> 
4747RUN <%= retry.loop(package_manager, "export DEBIAN_FRONTEND=noninteractive && ${package_manager} update && ${package_manager} update && ${package_manager} add --no-cache curl") %> 
4848<% } else { %> 
4949RUN <%= retry.loop(package_manager, "${package_manager} install -y findutils tar gzip") %> 
5050<% } %> 
5151
52- <% if (docker_base != ' wolfi') { %> 
52+ <% if (docker_base != ' wolfi' && docker_base != '  fips '  ) { %>
5353    # `tini` is a tiny but valid init for containers. This is used to cleanly 
5454    # control how ES and any child processes are shut down. 
5555    # For wolfi we pick it from the blessed wolfi package registry. 
@@ -117,25 +117,46 @@ RUN sed -i -e 's/ES_DISTRIBUTION_TYPE=tar/ES_DISTRIBUTION_TYPE=docker/' bin/elas
117117    chmod 0775 bin config config/jvm.options.d data logs plugins && \\ 
118118    find config -type f -exec chmod 0664 {} +
119119
120- <% if (docker_base == "cloud" ) { %>
121- COPY  filebeat-${version}.tar.gz metricbeat-${version}.tar.gz /tmp/
122- RUN  set -eux ; \\ 
123-     for beat in filebeat metricbeat ; do \\ 
124-       if [ ! -s /tmp/\$ beat-${version}.tar.gz ]; then \\ 
125-         echo "/tmp/\$ beat-${version}.tar.gz is empty - cannot uncompress"  2>&1 ; \\ 
126-         exit 1 ; \\ 
127-       fi ; \\ 
128-       if ! tar tf /tmp/\$ beat-${version}.tar.gz >/dev/null; then \\ 
129-         echo "/tmp/\$ beat-${version}.tar.gz is corrupt - cannot uncompress"  2>&1 ; \\ 
130-         exit 1 ; \\ 
131-       fi ; \\ 
132-       mkdir -p /opt/\$ beat ; \\ 
133-       tar xf /tmp/\$ beat-${version}.tar.gz -C /opt/\$ beat --strip-components=1 ; \\ 
134-     done
135- 
136- #  Add plugins infrastructure
137- RUN  mkdir -p /opt/plugins/archive
138- RUN  chmod -R 0555 /opt/plugins
120+ <% if (docker_base == "fips" ) { %>
121+     #  Add plugins infrastructure
122+     RUN  mkdir -p /opt/plugins/archive
123+     RUN  chmod -R 0555 /opt/plugins
124+ 
125+     RUN  mkdir -p /fips/libs
126+     COPY  fips/libs/*.jar /fips/libs/
127+ 
128+     COPY  filebeat-${version}.tar.gz metricbeat-${version}.tar.gz /tmp/
129+     RUN  set -eux ; \\ 
130+         for beat in filebeat metricbeat ; do \\ 
131+           if [ ! -s /tmp/\$ beat-${version}.tar.gz ]; then \\ 
132+             echo "/tmp/\$ beat-${version}.tar.gz is empty - cannot uncompress"  2>&1 ; \\ 
133+             exit 1 ; \\ 
134+           fi ; \\ 
135+           if ! tar tf /tmp/\$ beat-${version}.tar.gz >/dev/null; then \\ 
136+             echo "/tmp/\$ beat-${version}.tar.gz is corrupt - cannot uncompress"  2>&1 ; \\ 
137+             exit 1 ; \\ 
138+           fi ; \\ 
139+           mkdir -p /opt/\$ beat ; \\ 
140+           tar xf /tmp/\$ beat-${version}.tar.gz -C /opt/\$ beat --strip-components=1 ; \\ 
141+         done
142+ 
143+     COPY  plugins/*.zip /opt/plugins/archive/
144+ 
145+     RUN  chown 1000:1000 /opt/plugins/archive/*
146+     RUN  chmod 0444 /opt/plugins/archive/*
147+ 
148+     COPY  fips/resources/fips_java.security /usr/share/elasticsearch/config/fips_java.security
149+     COPY  fips/resources/fips_java.policy /usr/share/elasticsearch/config/fips_java.policy
150+ 
151+     WORKDIR  /usr/share/elasticsearch/config
152+ 
153+     # # Add fips specific JVM options
154+     RUN  cat <<EOF > /usr/share/elasticsearch/config/jvm.options.d/fips.options
155+     -Djavax.net.ssl.keyStoreType=BCFKS
156+     -Dorg.bouncycastle.fips.approved_only=true
157+     -Djava.security.properties=config/fips_java.security
158+     -Djava.security.policy=config/fips_java.policy
159+     EOF
139160<% } %>
140161
141162# ###############################################################################
@@ -157,7 +178,7 @@ RUN ${package_manager} update --setopt=tsflags=nodocs -y && \\
157178      nc shadow-utils zip findutils unzip procps-ng && \\  
158179    ${package_manager} clean all 
159180
160- <% } else if (docker_base == "wolfi") { %> 
181+ <% } else if (docker_base == "wolfi" || docker_base == "fips" ) { %> 
161182RUN <%= retry.loop(package_manager, 
162183          "export DEBIAN_FRONTEND=noninteractive && \n " + 
163184          "      ${package_manager} update && \n " + 
@@ -201,28 +222,24 @@ RUN <%= retry.loop(
201222<% } %> 
202223
203224
204- <% if (docker_base == "default" || docker_base == "cloud" ) { %> 
225+ <% if (docker_base == "default") { %> 
205226RUN groupadd -g 1000 elasticsearch && \\  
206227    adduser --uid 1000 --gid 1000 --home /usr/share/elasticsearch elasticsearch && \\  
207228    adduser elasticsearch root && \\  
208229    chown -R 0:0 /usr/share/elasticsearch 
209- <% } else if (docker_base == "wolfi") { %> 
230+ <% } else if (docker_base == "wolfi" || docker_base == "fips" ) { %> 
210231RUN groupadd -g 1000 elasticsearch && \ 
211232    adduser -G elasticsearch -u 1000 elasticsearch -D --home /usr/share/elasticsearch elasticsearch && \ 
212233    adduser elasticsearch root && \ 
213234    chown -R 0:0 /usr/share/elasticsearch 
214- <% } else { %> 
215- RUN groupadd -g 1000 elasticsearch && \\  
216-     adduser -u 1000 -g 1000 -G 0 -d /usr/share/elasticsearch elasticsearch && \\  
217-     chown -R 0:0 /usr/share/elasticsearch 
218235<% } %> 
219236
220237ENV ELASTIC_CONTAINER true 
221238
222239WORKDIR /usr/share/elasticsearch 
223240
224241COPY --from=builder --chown=0:0 /usr/share/elasticsearch /usr/share/elasticsearch 
225- <% if (docker_base != "wolfi") { %> 
242+ <% if (docker_base != "wolfi" && docker_base != "fips" ) { %> 
226243COPY --from=builder --chown=0:0 /bin/tini /bin/tini 
227244<% } %> 
228245
@@ -251,12 +268,12 @@ RUN chmod g=u /etc/passwd && \\
251268    chmod 0775 /usr/share/elasticsearch && \\ 
252269    chown elasticsearch bin config config/jvm.options.d data logs plugins
253270
254- <% if (docker_base == 'default'  || docker_base ==  'cloud' ) { %>
271+ <% if (docker_base == 'default' ) { %>
255272#  Update "cacerts" bundle to use Ubuntu's CA certificates (and make sure it
256273#  stays up-to-date with changes to Ubuntu's store)
257274COPY  bin/docker-openjdk /etc/ca-certificates/update.d/docker-openjdk
258275RUN  /etc/ca-certificates/update.d/docker-openjdk
259- <% } else if (docker_base == 'wolfi' ) { %>
276+ <% } else if (docker_base == 'wolfi'  || docker_base ==  "fips" ) { %>
260277RUN  ln -sf /etc/ssl/certs/java/cacerts /usr/share/elasticsearch/jdk/lib/security/cacerts
261278<% } else { %>
262279RUN  ln -sf /etc/pki/ca-trust/extracted/java/cacerts /usr/share/elasticsearch/jdk/lib/security/cacerts
@@ -303,14 +320,7 @@ RUN mkdir /licenses && cp LICENSE.txt /licenses/LICENSE
303320COPY  LICENSE /licenses/LICENSE.addendum
304321<% } %>
305322
306- <% if (docker_base == "cloud" ) { %>
307- ENTRYPOINT  ["/bin/tini" , "--" ]
308- CMD  ["/app/elasticsearch.sh" ]
309- #  Generate a stub command that will be overwritten at runtime
310- RUN  mkdir /app && \\ 
311-     echo -e '#!/bin/bash\\ nexec /usr/local/bin/docker-entrypoint.sh eswrapper'  > /app/elasticsearch.sh && \\ 
312-     chmod 0555 /app/elasticsearch.sh
313- <% } else if (docker_base == "wolfi" ) { %>
323+ <% if (docker_base == "wolfi"  || docker_base == "fips" ) { %>
314324#  Our actual entrypoint is `tini`, a minimal but functional init program. It
315325#  calls the entrypoint we provide, while correctly forwarding signals.
316326ENTRYPOINT  ["/sbin/tini" , "--" , "/usr/local/bin/docker-entrypoint.sh" ]
@@ -330,6 +340,12 @@ USER 1000:0
330340HEALTHCHECK  --interval=10s --timeout=5s --start-period=1m --retries=5 CMD curl -I -f --max-time 5 http://localhost:9200 || exit 1
331341<% } %>
332342
343+ <% if (docker_base == 'fips' ) { %>
344+ COPY  --from=builder --chown=0:0 /opt /opt
345+ ENV  ES_PLUGIN_ARCHIVE_DIR /opt/plugins/archive
346+ WORKDIR  /usr/share/elasticsearch
347+ COPY  --from=builder --chown=0:0 /fips/libs/*.jar /usr/share/elasticsearch/lib/
348+ <% } %>
333349# ###############################################################################
334350#  End of multi-stage Dockerfile
335351# ###############################################################################
0 commit comments