Dockerfile выдает ошибку при запуске bash-скрипта - PullRequest
1 голос
/ 31 октября 2019

У меня есть Dockerfile, как показано ниже:

#1st stage - wildfly production image
FROM wildfly-setup:17.0.0 AS wildfly-prod
USER jenkins
RUN mkdir /opt/wildfly/install && mkdir /opt/wildfly/install/config
COPY --chown=jenkins:jenkins init.sh /opt/wildfly/bin
RUN mkdir -p $JBOSS_HOME/standalone/data/datastorage
#Second stage - test run image
FROM wildfly-prod AS wildfly-sedi-test
USER jenkins
COPY --chown=jenkins:jenkins init.sh /opt/wildfly/bin
RUN /opt/wildfly/bin/init.sh
#CMD ["/opt/wildfly/bin/init.sh"]

И скрипт bash, который я запускаю из вышеупомянутого Dockerfile, выглядит так:

#!/bin/bash

if [ -e "$JBOSS_HOME/install/wildfly.sh" ] ; then
    $JBOSS_HOME/install/wildfly.sh
    rm $JBOSS_HOME/install/wildfly.sh
fi

# check for postgres running or not 
cnt=0
psql_terminate=2
while (( $cnt < 120 && $psql_terminate != 0 )); do
    postgres_isready -h $POSTGRES > /dev/null 2>&1

    if [ $? -eq 0 ] ; then
        let psql_terminate=0
        echo $psql_terminate
    fi

    let cnt=cnt+1
    sleep 1
done

if (( $psql_terminate == 0)) ; then
    exec $JBOSS_HOME/bin/standalone.sh -c standalone-full.xml
else
    echo "database unavailable."
    exit 1
fi

В Dockerfile, когда я не могукоманда CMD работает, но с командой RUN выдает приведенную ниже ошибку при построении образа:

Команда '/ bin / sh -c /opt/wildfly/bin/init.sh'возвратил ненулевой код: 1

Может кто-нибудь помочь мне в этом?

Заранее спасибо.

1 Ответ

1 голос
/ 05 ноября 2019

RUN выполнит ваш bash-скрипт при построении изображения .

Инструкция RUN выполнит любые команды в новом слое поверх текущего изображения и передаст результаты. Полученное зафиксированное изображение будет использовано для следующего шага в Dockerfile.

CMD выполнит ваш скрипт bash при запуске контейнера .

Основное назначение CMD состоит в предоставлении значений по умолчанию для исполняемого контейнера. Эти значения по умолчанию могут включать исполняемый файл или могут не включать исполняемый файл, и в этом случае вы также должны указать инструкцию ENTRYPOINT.

Так что я предполагаю, что ваш скрипт достигает exit 1, потому что этодолжен запускаться при запуске контейнера, а не при создании образа.

...