Запустите Node Manager в Weblogic (Docker), используя скрипт.

Я попытался докеризировать сервер weblogic. Теперь я столкнулся с проблемой при запуске диспетчера узлов после запуска сервера внутри контейнера докера. Мой файл докера, как показано ниже.

FROM oracle/weblogic:12.1.3-generic

ENV JAVA_OPTIONS="${JAVA_OPTIONS} - 
Dweblogic.nodemanager.SecureListener=false" \
ADMIN_PORT="7001" \
ADMIN_HOST="localhost"

USER oracle
COPY dockerfiles/keyStore/keystore_ss.jks /u01/oracle/keystore/
COPY dockerfiles/patch/* /u01/oracle/patch/
COPY dockerfiles/local_domainScripts /u01/oracle/local_domainScripts/
COPY dockerfiles/scripts/* /u01/oracle/
COPY dockerfiles/applicationFiles/ /u01/oracle/applicationFiles/

USER root
RUN yum install -y procps
RUN chmod +x startWeblogic.sh

USER oracle

RUN /u01/oracle/wlst /u01/oracle/local_domainScripts/config.py

RUN nohup bash -c "/u01/oracle/user_projects/domains/local_domain/bin/startNodeManager.sh &" && sleep 4

CMD ["/u01/oracle/user_projects/domains/local_domain/startWebLogic.sh"]

Это создаст экземпляр сервера weblogic. Я хочу запустить диспетчер узлов после запуска этого сервера.

Команда запуска:

docker run -d --name wls_local_domain --network=host --hostname localhost -p 7001:7001 test-docker:0-SNAPSHOT

Когда ./startNodeManager.sh выполняется внутри контейнера, который запустит диспетчер узлов. Чтобы запустить диспетчер узлов, сначала необходимо запустить сервер weblogic.

Я хочу, чтобы это с помощью сценария Bash. Я попробовал это, но это не помогло GitHub ссылку

2 ответа

Решение

Вы не можете (с пользой) RUN фоновый процесс. Эта команда Dockerfile запускает промежуточный контейнер, выполняющий RUN команда, сохраняет свою файловую систему и выходит; к моменту выполнения следующей команды Dockerfile процесс больше не выполняется.

Если это коммерчески поддерживаемый образ, вы можете посмотреть, есть ли у Oracle инструкции по его использованию. (После щелчка мышью ни один из примеров не запускает диспетчер узлов; это необходимо?)

Как правило, рекомендуется использовать только один сервер в контейнере Docker (в идеале на переднем плане и в качестве основного процесса контейнера). Если это сработает и нет общих зависимостей файловой системы, вы можете разделить все это, кроме финального CMD в один базовый Dockerfile, затем есть два дополнительных Dockerfile, которые просто имеют FROM линия, указывающая на ваше в основном построенное изображение и запрошенный CMD,

Если это действительно не сработает, вам придется вернуться к запуску некоторой системы инициализации в вашем контейнере, обычно супервизору.

Вам нужно запустить диспетчер узлов в качестве фонового процесса, а затем запустить сервер. Чтобы сохранить контейнер Docker во время выполнения фоновых процессов, вы можете использоватьtailкоманда.

Вот как я запускаю управляемый узел и сервер WebLogic в своем контейнере:

      #!/bin/bash

# ------------------------------------------------------------------------------
# start the Node Manager
# ------------------------------------------------------------------------------
function startNodeManager() {
    echo "starting the node manager for $MANAGED_SERVER_NAME server..."
    "$ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/bin/startNodeManager.sh" &

    while ! nc -z "$HOSTNAME" "$NODE_MANAGER_PORT"; do
      sleep 0.5
    done
    echo "node manager is up and ready to receive requests"
}

# ------------------------------------------------------------------------------
# start the WebLogic Admin server
# ------------------------------------------------------------------------------
function startAdminServer() {
    echo "starting the $ADMIN_SERVER_NAME server..."
    local logHome
    logHome="$ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/servers/$ADMIN_SERVER_NAME/logs"
    mkdir -p "$logHome"
    "$ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/bin/startWebLogic.sh" > "$logHome/$ADMIN_SERVER_NAME.out" 2>&1 &
}

# ------------------------------------------------------------------------------
# main app starts here
# ------------------------------------------------------------------------------
startNodeManager
startAdminServer

# this command keeps alive the docker container
tail -F \
    "$ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/servers/$ADMIN_SERVER_NAME/logs/$ADMIN_SERVER_NAME.log" \
    "$ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/servers/$ADMIN_SERVER_NAME/logs/$ADMIN_SERVER_NAME.nohup" \
    "$ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/servers/$ADMIN_SERVER_NAME/logs/$ADMIN_SERVER_NAME.out"

Это полный сценарий запуска, который вы можете использовать в качестве примера и улучшить его. Он запускает диспетчер узлов и сервер администратора: https://github.com/zappee/docker-images/blob/master/oracle-weblogic/oracle-weblogic-12.2.1.4-admin-server/container-scripts/startup. ш

Отсюда вы можете скачать полное рабочее решение.

Другие вопросы по тегам