Karaf 客户端无法登录以在容器中执行命令,收到“已关闭”错误消息

问题描述

我从自定义程序集构建我的 karaf 图像。下面是Dockerfile

FROM adoptopenjdk:11-jre-hotspot

ARG KaraF_disT=karaf
ARG ASSEMBLY_FILE=*.zip

ENV KaraF_INSTALL_PATH=/opt \
    KaraF_disT=${KaraF_disT}
ENV PATH=$PATH:${KaraF_INSTALL_PATH}/${KaraF_disT}/bin \
    MysqL_DB_HOST=${MysqL_DB_HOST:-db}

copY ${ASSEMBLY_FILE} ${KaraF_INSTALL_PATH}
copY docker-entrypoint.sh
RUN env && apt update && apt install -y unzip netcat && \
    unzip -q ${KaraF_INSTALL_PATH}/*.zip -d ${KaraF_INSTALL_PATH}/. && \
    rm ${KaraF_INSTALL_PATH}/*.zip && \
    chmod +x /docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["karaf","run"]
EXPOSE 8181 8101

docker-entrypoint.sh 中,它会做一些基本的检查。 步骤1:检查数据库端口是否正在侦听。 第 2 步:检查 karaf 是否正在运行。 第 3 步:如果没有安装 bundles(通常在第一次启动时),在后台启动 karaf 并执行命令以通过 client 安装我的功能。然后我收到一条 Closed 错误消息,即使使用 until 语法尝试多次仍然无效。所以现在它只是一次又一次地在行 echo "Try to install feature..." 处存货。

这是docker-entrypoint.sh

#!/bin/bash
if [ "${1}" == "karaf" ]; then
  shift

  until nc -z -v -w30 $MysqL_DB_HOST $MysqL_DB_PORT > /dev/null 2>&1
  do
    echo "Waiting for database connection..."
    # wait for 5 seconds before check again
    sleep 5
  done

  # check bundle installed or not
  if [ ! -d "${KaraF_INSTALL_PATH}/${KaraF_disT}/data/cache" ]; then
    echo "Bundle not installed."
    start
    sleep 5

    RUNNING=$(status)
    while [ "$RUNNING" == "Not Running ..." ]
    do
      echo "Waiting for karaf startup..."
      sleep 3
      RUNNING=$(status)
    done

    # running ok,try to install feature
    until client -p karaf "feature:install myfeature" > /dev/null 2>&1
    do
      echo "Try to install feature..."
      sleep 5
    done
    echo "Feature installed."

#    client -p karaf "feature:install myfeature" <------Here,i got a "Closed" error message
#    if [ $? -eq 0 ]; then
#      echo "Feature installing..."
#      sleep 30
#      echo "Feature installed."
#    fi

    stop
    echo "Stopping karaf server..."
    sleep 10
  fi

  set -- karaf "$@"
fi

exec "$@"

我试试docker exec -it myapp client -p karaf,正常登录。我不知道是怎么回事。 do client 命令时会显示一些日志。

2021-04-02T15:16:06,976 | INFO  | sshd-SshServer[43c01dfd]-nio2-thread-2 | ServerUserAuthService            | 42 - org.apache.sshd.core - 1.7.0 | Session karaf@/127.0.0.1:48622 authenticated
2021-04-02T15:16:13,106 | INFO  | sshd-SshServer[43c01dfd]-nio2-thread-1 | ServerUserAuthService            | 42 - org.apache.sshd.core - 1.7.0 | Session karaf@/127.0.0.1:48624 authenticated
2021-04-02T15:16:19,270 | INFO  | sshd-SshServer[43c01dfd]-nio2-thread-2 | ServerUserAuthService            | 42 - org.apache.sshd.core - 1.7.0 | Session karaf@/127.0.0.1:48626 authenticated

Apache karaf 版本:4.2.8 Docker 版本:20.10.5,社区

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...