我有以下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“内容类型: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 run
答案 0 :(得分:1)
这里的问题是ENTRYPOINT
将在容器启动时运行,并且将阻止默认的CMD
运行,因为脚本将循环等待服务器启动,即脚本将循环因为CMD不会运行,所以永远。
您需要执行以下一项操作:
在您的Entrypoint中启动kafka连接服务器,并在CMD中启动脚本,或者在容器外部运行脚本...。