在docker build RUN命令中运行多行shell脚本不起作用

yx2lnoni  于 12个月前  发布在  Shell
关注(0)|答案(1)|浏览(103)

我正在创建一个Docker镜像。它基本上使用eclipse-temurin
dockerfile确实在线下载了一些证书,并根据Java版本是否为8导入到Java中。
下面是Dockerfile

FROM eclipse-temurin:8

RUN curl -ksS https://myorg1.com/certs/root > Org1_CA.pem && \
    curl -ksS https://myorg2.com/certs/root > Org2_CA.pem && \
    openssl x509 -in Org1_CA.pem -inform PEM -out Org1_CA.crt && \
    openssl x509 -in Org2_CA.pem -inform PEM -out Org2_CA.crt && \
    cp Org1_CA.crt /usr/local/share/ca-certificates/Org1_CA.crt && \
    cp Org2_CA.crt /usr/local/share/ca-certificates/Org2_CA.crt && \
    update-ca-certificates

ARG BASE_TAG

RUN echo "BASE TAG is " ${BASE_TAG}

RUN set -eux; \
    if [ "$BASE_TAG" = "temurin-8-jammy" ] \
    then \
        mkdir -p "$JAVA_HOME""$JRE_PREFIX"/lib/security && \
        keytool -import -alias Org1Cert -keystore "$JAVA_HOME""$JRE_PREFIX"/lib/security/cacerts -file /usr/local/share/ca-certificates/Org1_CA.crt -storepass changeit -noprompt && \
        keytool -import -alias Org2Cert -keystore "$JAVA_HOME""$JRE_PREFIX"/lib/security/cacerts -file /usr/local/share/ca-certificates/Org2_CA.crt -storepass changeit -noprompt \
    else \
        mkdir -p "$JAVA_HOME"/conf/security && \
        keytool -importcert -alias Org1Cert -keystore "$JAVA_HOME"/conf/security/cacerts -file /usr/local/share/ca-certificates/Org1_CA.crt -storetype PKCS12 -storepass changeit -noprompt  && \
        keytool -importcert -alias Org2Cert -keystore "$JAVA_HOME"/conf/security/cacerts -file /usr/local/share/ca-certificates/Org2_CA.crt -storetype PKCS12 -storepass changeit -noprompt \
    fi

 RUN echo "DONE"

我使用的docker build命令是-
docker build . -t j8 --build-arg BASE_IMAGE=temurin-8-jammy --build-arg JRE_PREFIX=/jre
但我得到了错误
错误:无法解决:进程“/bin/sh -c未成功完成:退出代码:2”
当我运行单个命令时,它工作正常,但当我将其转换为单个RUN命令时,如果有其他命令,则会出错。
如何修复此错误?

egdjgwm8

egdjgwm81#

thenelsefi之前必须有;

if something; then this; else that; fi

就像这样:

RUN set -eux; \
    if [ "$BASE_TAG" = "temurin-8-jammy" ] ; \
    then \
        mkdir -p "$JAVA_HOME""$JRE_PREFIX"/lib/security && \
        keytool -import -alias Org1Cert -keystore "$JAVA_HOME""$JRE_PREFIX"/lib/security/cacerts -file /usr/local/share/ca-certificates/Org1_CA.crt -storepass changeit -noprompt && \
        keytool -import -alias Org2Cert -keystore "$JAVA_HOME""$JRE_PREFIX"/lib/security/cacerts -file /usr/local/share/ca-certificates/Org2_CA.crt -storepass changeit -noprompt; \
    else \
        mkdir -p "$JAVA_HOME"/conf/security && \
        keytool -importcert -alias Org1Cert -keystore "$JAVA_HOME"/conf/security/cacerts -file /usr/local/share/ca-certificates/Org1_CA.crt -storetype PKCS12 -storepass changeit -noprompt  && \
        keytool -importcert -alias Org2Cert -keystore "$JAVA_HOME"/conf/security/cacerts -file /usr/local/share/ca-certificates/Org2_CA.crt -storetype PKCS12 -storepass changeit -noprompt; \
    fi

相关问题