首页 > 解决方案 > 我可以在 DockerFile 中进行哪些更正以成功通过我的构建

问题描述

我的应用程序部署在使用 tomcat 9 和其中的应用程序 war 文件部署容器时构建 docker 映像失败,并出现以下错误:

错误:构建步骤 1“gcr.io/cloud-builders/docker”失败:退出状态 2

我是 docker 容器化的初学者,并在编写部署时使用了在线指南。请让我知道下面的 dockerFile 和 cloudbuild 文件有什么问题

Dockerfile :-

FROM openjdk:8-jre

ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME

# let "Tomcat Native" live somewhere isolated
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR

# runtime dependencies for Tomcat Native Libraries
# Tomcat Native 1.2+ requires a newer version of OpenSSL than debian:jessie has available
# > checking OpenSSL library version >= 1.0.2...
# > configure: error: Your version of OpenSSL is not compatible with this version of tcnative
# see http://tomcat.10.x6.nabble.com/VOTE-Release-Apache-Tomcat-8-0-32-tp5046007p5046024.html (and following discussion)
# and https://github.com/docker-library/tomcat/pull/31
ENV OPENSSL_VERSION 1.1.0j-1~deb9u1
RUN set -ex; \
    currentVersion="$(dpkg-query --show --showformat '${Version}\n' openssl)"; \
    if dpkg --compare-versions "$currentVersion" '<<' "$OPENSSL_VERSION"; then \
        if ! grep -q stretch /etc/apt/sources.list; then \
# only add stretch if we're not already building from within stretch
            { \
                echo 'deb http://deb.debian.org/debian stretch main'; \
                echo 'deb http://security.debian.org stretch/updates main'; \
                echo 'deb http://deb.debian.org/debian stretch-updates main'; \
            } > /etc/apt/sources.list.d/stretch.list; \
            { \
# add a negative "Pin-Priority" so that we never ever get packages from stretch unless we explicitly request them
                echo 'Package: *'; \
                echo 'Pin: release n=stretch*'; \
                echo 'Pin-Priority: -10'; \
                echo; \
# ... except OpenSSL, which is the reason we're here
                echo 'Package: openssl libssl*'; \
                echo "Pin: version $OPENSSL_VERSION"; \
                echo 'Pin-Priority: 990'; \
            } > /etc/apt/preferences.d/stretch-openssl; \
        fi; \
        apt-get update; \
        apt-get install -y --no-install-recommends openssl="$OPENSSL_VERSION"; \
        rm -rf /var/lib/apt/lists/*; \
    fi

RUN apt-get update && apt-get install -y --no-install-recommends \
        libapr1 \
    && rm -rf /var/lib/apt/lists/*

# see https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/KEYS
# see also "update.sh" (https://github.com/docker-library/tomcat/blob/master/update.sh)
ENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23

ENV TOMCAT_MAJOR 9
ENV TOMCAT_VERSION 9.0.14
ENV TOMCAT_SHA512 6a06eabacb02eaa2c64772265f8ddb5ddbfbad72b4c5da82e68da739675c3ec7e4692ebb8aa80e1b5512006f60856c939c7c3a5fe4f46f30bd4b575ecd068d54

ENV TOMCAT_TGZ_URLS \
# https://issues.apache.org/jira/browse/INFRA-8753?focusedCommentId=14735394#comment-14735394
    https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
# if the version is outdated, we might have to pull from the dist/archive :/
    https://www-us.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz

ENV TOMCAT_ASC_URLS \
    https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc \
# not all the mirrors actually carry the .asc files :'(
    https://www-us.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc \
    https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc \
    https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc

RUN set -eux; \
    \
    savedAptMark="$(apt-mark showmanual)"; \
    apt-get update; \
    \
    apt-get install -y --no-install-recommends gnupg dirmngr; \
    \
    export GNUPGHOME="$(mktemp -d)"; \
    for key in $GPG_KEYS; do \
        gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$key"; \
    done; \
    \
    apt-get install -y --no-install-recommends wget ca-certificates; \
    \
    success=; \
    for url in $TOMCAT_TGZ_URLS; do \
        if wget -O tomcat.tar.gz "$url"; then \
            success=1; \
            break; \
        fi; \
    done; \
    [ -n "$success" ]; \
    \
    echo "$TOMCAT_SHA512 *tomcat.tar.gz" | sha512sum -c -; \
    \
    success=; \
    for url in $TOMCAT_ASC_URLS; do \
        if wget -O tomcat.tar.gz.asc "$url"; then \
            success=1; \
            break; \
        fi; \
    done; \
    [ -n "$success" ]; \
    \
    gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz; \
    tar -xvf tomcat.tar.gz --strip-components=1; \
    rm bin/*.bat; \
    rm tomcat.tar.gz*; \
    command -v gpgconf && gpgconf --kill all || :; \
    rm -rf "$GNUPGHOME"; \
    \
    nativeBuildDir="$(mktemp -d)"; \
    tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1; \
    apt-get install -y --no-install-recommends \
        dpkg-dev \
        gcc \
        libapr1-dev \
        libssl-dev \
        make \
        "openjdk-${JAVA_VERSION%%[.~bu-]*}-jdk=$JAVA_DEBIAN_VERSION" \
    ; \
    ( \
        export CATALINA_HOME="$PWD"; \
        cd "$nativeBuildDir/native"; \
        gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
        ./configure \
            --build="$gnuArch" \
            --libdir="$TOMCAT_NATIVE_LIBDIR" \
            --prefix="$CATALINA_HOME" \
            --with-apr="$(which apr-1-config)" \
            --with-java-home="$(docker-java-home)" \
            --with-ssl=yes; \
        make -j "$(nproc)"; \
        make install; \
    ); \
    rm -rf "$nativeBuildDir"; \
    rm bin/tomcat-native.tar.gz; \
    \
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
    apt-mark auto '.*' > /dev/null; \
    [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
    rm -rf /var/lib/apt/lists/*; \
    \
# sh removes env vars it doesn't support (ones with periods)
# https://github.com/docker-library/tomcat/issues/77
    find ./bin/ -name '*.sh' -exec sed -ri 's|^#!/bin/sh$|#!/usr/bin/env bash|' '{}' +; \
    \
# fix permissions (especially for running as non-root)
# https://github.com/docker-library/tomcat/issues/35
    chmod -R +rX .; \
    chmod 777 logs work

# verify Tomcat Native is working properly
RUN set -e \
    && nativeLines="$(catalina.sh configtest 2>&1)" \
    && nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" \
    && nativeLines="$(echo "$nativeLines" | sort -u)" \
    && if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then \
        echo >&2 "$nativeLines"; \
        exit 1; \
    fi \
    && rm -rf ${CATALINA_HOME}/webapps/* || true

EXPOSE 8080
CMD ["catalina.sh", "run"]

COPY target/app-0.0.1.war ${CATALINA_HOME}/webapps/app.war

cloudbuild.yaml:-

steps:
- name: 'gcr.io/cloud-builders/mvn'
  args: ['clean','install','-Dmaven.test.skip=true']
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '--tag=gcr.io/project/app:$TAG_NAME', '.']
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/project/app:$TAG_NAME']    
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['app', 'deploy', '--image-url', 'gcr.io/project/app:$TAG_NAME', '--project', 'project', '--version', '$TAG_NAME', '--no-promote']
images: ['gcr.io/project/app:$TAG_NAME']
timeout: 2400s
options:
  machineType: 'N1_HIGHCPU_32'

这是完整的日志:

Step #1: Preparing to unpack .../libapr1_1.5.2-5_amd64.deb ...
Step #1: Unpacking libapr1:amd64 (1.5.2-5) ...
Step #1: Setting up libapr1:amd64 (1.5.2-5) ...
Step #1: Processing triggers for libc-bin (2.24-11+deb9u4) ...
Step #1: Removing intermediate container 1fc38e2094c7
Step #1:  ---> 4176a4819577
Step #1: Step 11/21 : ENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
Step #1:  ---> Running in b9f5df938ebc
Step #1: Removing intermediate container b9f5df938ebc
Step #1:  ---> e41d4c57146b
Step #1: Step 12/21 : ENV TOMCAT_MAJOR 9
Step #1:  ---> Running in 93228b5fc301
Step #1: Removing intermediate container 93228b5fc301
Step #1:  ---> 9493e206667a
Step #1: Step 13/21 : ENV TOMCAT_VERSION 9.0.14
Step #1:  ---> Running in 2127ca636165
Step #1: Removing intermediate container 2127ca636165
Step #1:  ---> 29cd9c11963b
Step #1: Step 14/21 : ENV TOMCAT_SHA512 6a06eabacb02eaa2c64772265f8ddb5ddbfbad72b4c5da82e68da739675c3ec7e4692ebb8aa80e1b5512006f60856c939c7c3a5fe4f46f30bd4b575ecd068d54
Step #1:  ---> Running in 77ac801c3995
Step #1: Removing intermediate container 77ac801c3995
Step #1:  ---> ab68501a7204
Step #1: Step 15/21 : ENV TOMCAT_TGZ_URLS   https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz    https://www-us.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz    https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz   https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz
Step #1:  ---> Running in 5475b4b3fdf0
Step #1: Removing intermediate container 5475b4b3fdf0
Step #1:  ---> d35149a8d4e8
Step #1: Step 16/21 : ENV TOMCAT_ASC_URLS   https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc    https://www-us.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc    https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc   https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc
Step #1:  ---> Running in 143651dc16c2
Step #1: Removing intermediate container 143651dc16c2
Step #1:  ---> e8cd3a05124b
Step #1: Step 17/21 : RUN set -eux;         savedAptMark="$(apt-mark showmanual)";  apt-get update;         apt-get install -y --no-install-recommends gnupg dirmngr;       export GNUPGHOME="$(mktemp -d)";    for key in $GPG_KEYS; do        gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$key";    done;       apt-get install -y --no-install-recommends wget ca-certificates;        success=;   for url in $TOMCAT_TGZ_URLS; do         if wget -O tomcat.tar.gz "$url"; then           success=1;          break;      fi;     done;   [ -n "$success" ];      echo "$TOMCAT_SHA512 *tomcat.tar.gz" | sha512sum -c -;      success=;   for url in $TOMCAT_ASC_URLS; do         if wget -O tomcat.tar.gz.asc "$url"; then           success=1;          break;      fi;     done;   [ -n "$success" ];      gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz;   tar -xvf tomcat.tar.gz --strip-components=1;    rm bin/*.bat;   rm tomcat.tar.gz*;  command -v gpgconf && gpgconf --kill all || :;  rm -rf "$GNUPGHOME";        nativeBuildDir="$(mktemp -d)";  tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1;    apt-get install -y --no-install-recommends      dpkg-dev        gcc         libapr1-dev         libssl-dev      make        "openjdk-${JAVA_VERSION%%[.~bu-]*}-jdk=$JAVA_DEBIAN_VERSION"    ;   (       export CATALINA_HOME="$PWD";        cd "$nativeBuildDir/native";        gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)";      ./configure             --build="$gnuArch"          --libdir="$TOMCAT_NATIVE_LIBDIR"            --prefix="$CATALINA_HOME"           --with-apr="$(which apr-1-config)"          --with-java-home="$(docker-java-home)"          --with-ssl=yes;         make -j "$(nproc)";         make install;   );  rm -rf "$nativeBuildDir";   rm bin/tomcat-native.tar.gz;        apt-mark auto '.*' > /dev/null;     [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark;    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false;   rm -rf /var/lib/apt/lists/*;        find ./bin/ -name '*.sh' -exec sed -ri 's|^#!/bin/sh$|#!/usr/bin/env bash|' '{}' +;         chmod -R +rX .;     chmod 777 logs work
Step #1:  ---> Running in f7a894cf216c
Step #1: [91m+ apt-mark showmanual
Step #1: [0m[91m+ savedAptMark=bzip2
Step #1: ca-certificates
Step #1: curl
Step #1: dirmngr
Step #1: fontconfig
Step #1: gnupg
Step #1: iproute2
Step #1: iputils-ping
Step #1: libapr1
Step #1: libfreetype6
Step #1: netbase
Step #1: unzip
Step #1: wget
Step #1: xz-utils
Step #1: + apt-get update
Step #1: [0mIgn:1 http://deb.debian.org/debian stretch InRelease
Step #1: Get:2 http://security.debian.org/debian-security stretch/updates InRelease [94.3 kB]
Step #1: Get:3 http://deb.debian.org/debian stretch-updates InRelease [91.0 kB]
Step #1: Get:4 http://deb.debian.org/debian stretch Release [118 kB]
Step #1: Get:5 http://deb.debian.org/debian stretch Release.gpg [2434 B]
Step #1: Get:6 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [492 kB]
Step #1: Get:7 http://deb.debian.org/debian stretch-updates/main amd64 Packages [27.2 kB]
Step #1: Get:8 http://deb.debian.org/debian stretch/main amd64 Packages [7082 kB]
Step #1: Fetched 7907 kB in 1s (4681 kB/s)
Step #1: Reading package lists...
Step #1: [91m+ apt-get install -y --no-install-recommends gnupg dirmngr
Step #1: [0mReading package lists...
Step #1: Building dependency tree...
Step #1: Reading state information...
Step #1: dirmngr is already the newest version (2.1.18-8~deb9u4).
Step #1: gnupg is already the newest version (2.1.18-8~deb9u4).
Step #1: 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Step #1: [91m+ mktemp -d
Step #1: [0m[91m+ export GNUPGHOME=/tmp/tmp.8FhNStIe88
Step #1: + gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys 05AB33110949707C93A279E3D3EFE6B686867BA6
Step #1: [0m[91mgpg: keybox '/tmp/tmp.8FhNStIe88/pubring.kbx' created
Step #1: [0m[91mgpg: keyserver receive failed: No data
Step #1: The command '/bin/sh -c set -eux;      savedAptMark="$(apt-mark showmanual)";  apt-get update;         apt-get install -y --no-install-recommends gnupg dirmngr;       export GNUPGHOME="$(mktemp -d)";    for key in $GPG_KEYS; do        gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$key";    done;       apt-get install -y --no-install-recommends wget ca-certificates;        success=;   for url in $TOMCAT_TGZ_URLS; do         if wget -O tomcat.tar.gz "$url"; then           success=1;          break;      fi;     done;   [ -n "$success" ];      echo "$TOMCAT_SHA512 *tomcat.tar.gz" | sha512sum -c -;      success=;   for url in $TOMCAT_ASC_URLS; do         if wget -O tomcat.tar.gz.asc "$url"; then           success=1;          break;      fi;     done;   [ -n "$success" ];      gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz;   tar -xvf tomcat.tar.gz --strip-components=1;    rm bin/*.bat;   rm tomcat.tar.gz*;  command -v gpgconf && gpgconf --kill all || :;  rm -rf "$GNUPGHOME";        nativeBuildDir="$(mktemp -d)";  tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1;    apt-get install -y --no-install-recommends      dpkg-dev        gcc         libapr1-dev         libssl-dev      make        "openjdk-${JAVA_VERSION%%[.~bu-]*}-jdk=$JAVA_DEBIAN_VERSION"    ;   (       export CATALINA_HOME="$PWD";        cd "$nativeBuildDir/native";        gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)";      ./configure             --build="$gnuArch"          --libdir="$TOMCAT_NATIVE_LIBDIR"            --prefix="$CATALINA_HOME"           --with-apr="$(which apr-1-config)"          --with-java-home="$(docker-java-home)"          --with-ssl=yes;         make -j "$(nproc)";         make install;   );  rm -rf "$nativeBuildDir";   rm bin/tomcat-native.tar.gz;        apt-mark auto '.*' > /dev/null;     [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark;    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false;   rm -rf /var/lib/apt/lists/*;        find ./bin/ -name '*.sh' -exec sed -ri 's|^#!/bin/sh$|#!/usr/bin/env bash|' '{}' +;         chmod -R +rX .;     chmod 777 logs work' returned a non-zero code: 2
Finished Step #1
ERROR
ERROR: build step 1 "gcr.io/cloud-builders/docker" failed: exit status 2
Step #1: [0m

标签: google-app-enginedockerfile

解决方案


推荐阅读