|
1 | | -ARG BASE_IMAGE=tomcat:10.1.26-jdk21-temurin-jammy |
2 | | -#referencing a specific image digest pins our unidata tomcat-docker image to platform amd64 (good) |
3 | | -ARG UNIDATA_TOMCAT_IMAGE=unidata/tomcat-docker:10-jdk17@sha256:af7d3fecec753cbd438f25881deeaf48b40ac1f105971d6f300252e104e39fb2 |
4 | | -FROM ${UNIDATA_TOMCAT_IMAGE} AS unidata-tomcat-image |
5 | | -FROM ${BASE_IMAGE} |
| 1 | +ARG ERDDAP_VERSION=v2.27.0 |
| 2 | +ARG BASE_IMAGE=erddap/erddap:$ERDDAP_VERSION |
| 3 | +FROM $BASE_IMAGE |
6 | 4 |
|
7 | | -#use approaches and hardened files from https://github.com/Unidata/tomcat-docker |
8 | | -#note: we don't inherit directly from Unidata/tomcat-docker to allow more |
9 | | -#flexibility in building images using different tomcat base images, architectures, etc |
10 | | -RUN apt-get update && \ |
11 | | - apt-get install -y --no-install-recommends \ |
12 | | - gosu \ |
13 | | - zip \ |
14 | | - unzip \ |
15 | | - && \ |
16 | | - # Cleanup |
17 | | - apt-get clean && \ |
18 | | - rm -rf /var/lib/apt/lists/* && \ |
19 | | - # Eliminate default web applications |
20 | | - rm -rf ${CATALINA_HOME}/webapps/* && \ |
21 | | - rm -rf ${CATALINA_HOME}/webapps.dist && \ |
22 | | - # Obscuring server info |
23 | | - cd ${CATALINA_HOME}/lib && \ |
24 | | - mkdir -p org/apache/catalina/util/ && \ |
25 | | - unzip -j catalina.jar org/apache/catalina/util/ServerInfo.properties \ |
26 | | - -d org/apache/catalina/util/ && \ |
27 | | - sed -i 's/server.info=.*/server.info=Apache Tomcat/g' \ |
28 | | - org/apache/catalina/util/ServerInfo.properties && \ |
29 | | - zip -ur catalina.jar \ |
30 | | - org/apache/catalina/util/ServerInfo.properties && \ |
31 | | - rm -rf org && cd ${CATALINA_HOME} && \ |
32 | | - # Setting restrictive umask container-wide |
33 | | - echo "session optional pam_umask.so" >> /etc/pam.d/common-session && \ |
34 | | - sed -i 's/UMASK.*022/UMASK 007/g' /etc/login.defs |
35 | | - |
36 | | -# Security enhanced web.xml |
37 | | -COPY --from=unidata-tomcat-image ${CATALINA_HOME}/conf/web.xml ${CATALINA_HOME}/conf/ |
38 | | - |
39 | | -# Security enhanced server.xml |
40 | | -COPY --from=unidata-tomcat-image ${CATALINA_HOME}/conf/server.xml ${CATALINA_HOME}/conf/ |
41 | | - |
42 | | -ARG ERDDAP_VERSION=2.25.1 |
43 | | -ARG ERDDAP_CONTENT_VERSION=1.0.0 |
44 | | -ARG ERDDAP_WAR_URL="https://github.com/ERDDAP/erddap/releases/download/v${ERDDAP_VERSION}/erddap.war" |
45 | | -ARG ERDDAP_CONTENT_URL="https://github.com/ERDDAP/erddapContent/archive/refs/tags/content${ERDDAP_CONTENT_VERSION}.zip" |
46 | | -ENV ERDDAP_bigParentDirectory=/erddapData |
47 | | - |
48 | | -RUN apt-get update && apt-get install -y unzip xmlstarlet \ |
49 | | - && if ! command -v gosu &> /dev/null; then apt-get install -y gosu; fi \ |
| 5 | +RUN apt-get update && apt-get install -y gettext-base xmlstarlet \ |
50 | 6 | && rm -rf /var/lib/apt/lists/* |
51 | 7 |
|
52 | | -ARG BUST_CACHE=1 |
53 | | -RUN \ |
54 | | - mkdir -p /tmp/dl && \ |
55 | | - curl -fSL "${ERDDAP_WAR_URL}" -o /tmp/dl/erddap.war && \ |
56 | | - unzip /tmp/dl/erddap.war -d ${CATALINA_HOME}/webapps/erddap/ && \ |
57 | | - curl -fSL "${ERDDAP_CONTENT_URL}" -o /tmp/dl/erddapContent.zip && \ |
58 | | - unzip /tmp/dl/erddapContent.zip -d /tmp/dl/erddapContent && \ |
59 | | - find /tmp/dl/erddapContent -type d -name content -exec cp -r "{}" ${CATALINA_HOME} \; && \ |
60 | | - rm -rf /tmp/dl && \ |
61 | | - sed -i 's#</Context>#<Resources cachingAllowed="true" cacheMaxSize="100000" />\n&#' ${CATALINA_HOME}/conf/context.xml && \ |
62 | | - rm -rf /tmp/* /var/tmp/* && \ |
63 | | - mkdir -p ${ERDDAP_bigParentDirectory} |
64 | | - |
65 | | -# Java options |
66 | | -COPY files/setenv.sh ${CATALINA_HOME}/bin/setenv.sh |
67 | | - |
68 | | -# server.xml fixup |
69 | | -COPY update-server-xml.sh /opt/update-server-xml.sh |
70 | | -RUN /opt/update-server-xml.sh |
71 | | - |
72 | | -# Default configuration |
73 | | -# Note: Make sure ERDDAP_flagKeyKey is set either in a runtime environment variable or in setup.xml |
74 | | -# If a value is not set, a random value for ERDDAP_flagKeyKey will be generated at runtime. |
75 | | -ENV ERDDAP_baseHttpsUrl="https://localhost:8443" \ |
76 | | - ERDDAP_emailEverythingTo= "[email protected]" \ |
77 | | - ERDDAP_emailDailyReportsTo= "[email protected]" \ |
78 | | - ERDDAP_emailFromAddress= "[email protected]" \ |
79 | | - ERDDAP_emailUserName="" \ |
80 | | - ERDDAP_emailPassword="" \ |
81 | | - ERDDAP_emailProperties="" \ |
82 | | - ERDDAP_emailSmtpHost="" \ |
83 | | - ERDDAP_emailSmtpPort="" \ |
84 | | - ERDDAP_adminInstitution="Axiom Docker Install" \ |
85 | | - ERDDAP_adminInstitutionUrl="https://github.com/axiom-data-science/docker-erddap" \ |
86 | | - ERDDAP_adminIndividualName="Axiom Docker Install" \ |
87 | | - ERDDAP_adminPosition="Software Engineer" \ |
88 | | - ERDDAP_adminPhone="555-555-5555" \ |
89 | | - ERDDAP_adminAddress="123 Irrelevant St." \ |
90 | | - ERDDAP_adminCity="Nowhere" \ |
91 | | - ERDDAP_adminStateOrProvince="AK" \ |
92 | | - ERDDAP_adminPostalCode="99504" \ |
93 | | - ERDDAP_adminCountry="USA" \ |
94 | | - ERDDAP_adminEmail= "[email protected]" |
95 | | - |
96 | | -COPY entrypoint.sh datasets.d.sh / |
97 | | -ENTRYPOINT ["/entrypoint.sh"] |
98 | | - |
99 | | -EXPOSE 8080 |
100 | | -CMD ["catalina.sh", "run"] |
| 8 | +COPY datasets.d.sh / |
| 9 | + |
| 10 | +# advise users to use upstream offical ERDDAP docker image |
| 11 | +# if they aren't using experimental features in this image |
| 12 | +COPY --chmod=755 <<EOF /init.d/00-advise-upstream.sh |
| 13 | +#/bin/sh |
| 14 | +cat <<EOF2 |
| 15 | + |
| 16 | +███████ ██████ ██████ ██████ █████ ██████ |
| 17 | +██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ |
| 18 | +█████ ██████ ██ ██ ██ ██ ███████ ██████ |
| 19 | +██ ██ ██ ██ ██ ██ ██ ██ ██ ██ |
| 20 | +███████ ██ ██ ██████ ██████ ██ ██ ██ |
| 21 | + |
| 22 | +NOTE: As of version v2.27.0 this image (axiom/docker-erddap) |
| 23 | +is derived from the official ERDDAP Docker image (erddap/erddap). |
| 24 | + |
| 25 | +If you are not using any experimental functionality offered |
| 26 | +by the axiom image (notably datasets.d), you are recommended |
| 27 | +to use the official ERDDAP Docker image instead. |
| 28 | + |
| 29 | +See https://hub.docker.com/r/erddap/erddap for more details. |
| 30 | + |
| 31 | +EOF2 |
| 32 | +EOF |
| 33 | + |
| 34 | +COPY --chmod=755 <<'EOF' /init.d/50-datasets.d.sh |
| 35 | +#/bin/sh |
| 36 | +### |
| 37 | +# Add datasets in /datasets.d to datasets.xml |
| 38 | +### |
| 39 | +if [ -d "/datasets.d" ]; then |
| 40 | + echo "Creating datasets.xml from /datasets.d" |
| 41 | + ERDDAP_CONTENT_DIR="/usr/local/tomcat/content/erddap" |
| 42 | + DATASETS_XML="${ERDDAP_CONTENT_DIR}/datasets.xml" |
| 43 | + if [ -f "$DATASETS_XML" ]; then |
| 44 | + #datasets.xml exists, make sure we have a backup of it |
| 45 | + DATASETS_XML_MD5SUM=$(md5sum "$DATASETS_XML" | awk '{print $1}') |
| 46 | + if ! md5sum "${ERDDAP_CONTENT_DIR}/datasets.xml.*.bak" 2>/dev/null | grep -q "$DATASETS_XML_MD5SUM"; then |
| 47 | + #we don't have a backup of this version of datasets.xml yet, make one |
| 48 | + DATASETS_XML_BACKUP="${ERDDAP_CONTENT_DIR}"/datasets.xml.$(date -u +"%Y%m%dT%H%M%SZ").bak |
| 49 | + echo "Backing up "${DATASETS_XML}" to ${DATASETS_XML_BACKUP}" |
| 50 | + cp "$DATASETS_XML" "${DATASETS_XML_BACKUP}" |
| 51 | + fi |
| 52 | + fi |
| 53 | + /datasets.d.sh -o "$DATASETS_XML" -w |
| 54 | +fi |
| 55 | +EOF |
| 56 | + |
| 57 | +ENV ERDDAP_useHeadersForUrl=true \ |
| 58 | + ERDDAP_useSaxParser=true |
0 commit comments