如果在 ENTRYPOINT 之后使用,CMD 不会 运行

CMD does not run if used after ENTRYPOINT

我有以下 docker 文件

FROM confluentinc/cp-kafka-connect:5.3.1

RUN apt-get update && apt-get -y install cron

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/name/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 plugins-config.sh /usr/share/kafka-connect-script/plugins-config.sh
RUN chmod +x /usr/share/kafka-connect-script/plugins-config.sh

ENTRYPOINT [ "./etc/confluent/docker/run" ]

CMD ["/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=60

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

/bin/bash

正确调用了入口点,但未调用 CMD。

我也试着理解这里给出的解决方案

但是我没看懂解决方法

如果有人能解释一下这里出了什么问题。

我想要完成的事情

我正在尝试拥有一个 docker 容器映像,它将启动 kafka-connect 服务器 (ENTRYPOINT),然后通过 bash 文件 (CMD) 我将配置插件。要求是每次容器重新启动时都执行相同的步骤序列。

CMDENTRYPOINT 之后的 运行,就像函数调用后的参数一样,在同一命令行中.

在您的情况下,您需要按顺序 运行ning 执行两个不同的命令。然后,您可以将它们添加到 startup_script.sh 中,其内容为:

#!/bin/bash

./etc/confluent/docker/run & # run in background not to get stuck in here

/usr/share/kafka-connect-script/plugins-config.sh # apply configuration

sleep 100000000 # to avoid the startup script to exit since that would kill the container