微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?