Запустите 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. ш
Отсюда вы можете скачать полное рабочее решение.