运行 kafka-connect docker 启动后 bash 脚本 运行

Running a bash script after the kafka-connect docker is up and running

我有以下 docker 文件

FROM confluentinc/cp-kafka-connect:5.3.1

ENV CONNECT_PLUGIN_PATH=/usr/share/java

# JDBC-MariaDB
RUN wget -nv -P /usr/share/java/kafka-connect-jdbc/ https://downloads.mariadb.com/Connectors/java/connector-java-2.4.4/mariadb-java-client-2.4.4.jar

# SNMP Source
RUN wget -nv -P /tmp/ https://github.com/KarthikDuggirala/kafka-connect-snmp/releases/download/0.0.1.11/kafka-connect-snmp-0.0.1.11.tar.gz
RUN mkdir /tmp/kafka-connect-snmp && tar -xf /tmp/kafka-connect-snmp-0.0.1.11.tar.gz -C /tmp/kafka-connect-snmp/
RUN mv /tmp/kafka-connect-snmp/usr/share/kafka-connect/kafka-connect-snmp /usr/share/java/

# COPY script and make it executable
COPY plugins-config.sh /usr/share/kafka-connect-script/plugins-config.sh
RUN ["chmod", "+x", "/usr/share/kafka-connect-script/plugins-config.sh"]

#entrypoint
ENTRYPOINT [ "./usr/share/kafka-connect-script/plugins-config.sh" ]

和以下 bash 脚本

#!/bin/bash
#script to configure kafka connect with plugins
#export CONNECT_REST_ADVERTISED_HOST_NAME=localhost
#export CONNECT_REST_PORT=8083
url=http://$CONNECT_REST_ADVERTISED_HOST_NAME:$CONNECT_REST_PORT/connectors
curl_command="curl -s -o /dev/null -w %{http_code} $url"
sleep_second=5
sleep_second_counter=0
max_seconds_to_wait=30

echo "Waiting for Kafka Connect to start listening on localhost"
echo "HOST: $CONNECT_REST_ADVERTISED_HOST_NAME , PORT: $CONNECT_REST_PORT"
while [[ $(eval $curl_command) -eq 000 ]]
 do 
    echo "In"
    echo -e $date " Kafka Connect listener HTTP state: " $(eval $curl_command) " (waiting for 200) $sleep_second_counter"
    echo "Going to sleep for $sleep_second seconds"
    # sleep $sleep_second
    echo "Finished sleeping"
    # ((sleep_second_counter+=$sleep_second))
    echo "Finished counter"
done
echo "Out"
nc -vz $CONNECT_REST_ADVERTISED_HOST_NAME $CONNECT_REST_PORT

我尝试 运行 docker 并使用 docker 日志来查看发生了什么,我希望脚本会 运行 并等到 kafka连接已启动。但显然几秒钟后脚本或(我不知道挂了什么)挂起,我再也看不到任何控制台打印。

我有点不知所措,所以我需要一些指导,了解我遗漏了什么,或者这不是正确的方法

我想做什么

我想定义逻辑,我可以等待 kafka 连接启动,然后 运行 curl 命令

curl -X POST -H "Content-Type: application/json" --data '{"name":"","config":{"connector.class":"com.github.jcustenborder.kafka.connect.snmp.SnmpTrapSourceConnector","topic":"fm_snmp"}}' http://localhost:8083/connectors

PS:我不能使用 docker-compose 方式来完成,因为有些地方我必须使用 docker 运行

这里的问题是 ENTRYPOINT 将在容器启动时 运行 并将阻止默认的 CMD 到 运行 因为脚本将循环等待服务器是的,那就是脚本将永远循环,因为 CMD 不会 运行.

您需要执行以下操作之一:

在您的入口点启动 kafka 连接服务器并在 CMD 中启动您的脚本,或者 运行在容器外启动您的脚本....