【问题标题】:How can I run script after starting process in docker?在 docker 中启动进程后如何运行脚本?
【发布时间】:2020-09-16 20:36:59
【问题描述】:
  1. 我想在 docker 中运行这个命令。
./kafka_2.12-2.2.1/bin/connect-distributed.sh","./kafka_2.12-2.2.1/config/connectdistributed.properties"

此命令启动 Kafka 连接并连接到我的 azure 事件中心。

  1. 连接 Kafka 后,我想在 docker 中运行脚本文件。

./script.sh

在此脚本中检查 Kafka 是否连接成功。如果未连接,则等待连接。连接完成后,检查 XYZ 名称连接器是否不可用,然后创建它,否则脚本将终止。我可以在本地机器上做这些事情,但我不能在 docker 中。

【问题讨论】:

  • 如果没有 Docker,你会怎么做?如果你切换到基于 Docker 的 Kafka,什么不起作用?

标签: docker apache-kafka dockerfile


【解决方案1】:

我需要做一些类似的事情来等待数据库在服务器启动之前初始化,否则它会在整个撰写过程完成之前失败/退出。我向服务器添加了一个入口点脚本,如下所示。

我想有一种方法可以调用您的服务并发送命令立即退出。您可能必须在该其他映像上安装基本工具。

所以,我有一个数据库映像。我需要在服务器映像上安装基本 db connect (psql, sqlcmd) 才能联系我的 db 容器以确保它正在运行。


host="$1"
shift
cmd="$@"

if [ "${PROVIDER}" == "postgres" ]; then
  echo -e "Running under Postgres"
  until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "$POSTGRES_USER" "$POSTGRES_DB" -c '\q'; do
  >&2 echo -e "Postgres is unavailable - sleeping"
  sleep 2
done

# https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-docker?view=sql-server-ver15
# The IP address in the connection string is the IP address of the host machine that is running the container.
else
  echo -e "Running under Sql Server"
  # sqlcmd -?
  # sqlcmd -S db.mssql -U rust -P  -d rust_test -q "Select * from rust.content_categories"
  # sqlcmd -S 192.168.1.108 -U test -P  -d shortpoetdb -q "Select * from vcc.admin_users"
  until /opt/mssql-tools/bin/sqlcmd -S db.mssql -U "${MSSQL_USER}" -P "${MSSQL_PASSWORD}" -d "${MSSQL_DB}" -q ":exit"; do
  >&2 echo -e "$Mssql is $unavailable - sleeping"
  sleep 2
done
fi

>&2 echo -e "${PROVIDER} Database is up - executing command"
exec $cmd

【讨论】:

    【解决方案2】:

    想在 docker 中运行这个命令。 ./kafka_2.12-2.2.1/bin/connect-distributed.sh

    confluentinc/cp-kafka-connect 图像已经运行了这个

    您不应在同一台机器或容器中的多个进程上运行 Connect 和 Brokers

    【讨论】:

      【解决方案3】:

      将您的脚本作为后台进程运行,它将继续检查 Kafka 是否已连接。连接后,它将运行其命令并退出,您的主命令将继续运行且 docker 不会退出

      例如。

         CMD nohup bash -c "script.sh &"  &&  your-command
         
      

      【讨论】:

      • 您无法在 Dockerfile 中启动后台进程。这个RUN 命令根本不起作用。
      • 是的,我的错,谢谢你指出这一点,我已经编辑了答案
      猜你喜欢
      • 2018-05-20
      • 2016-01-05
      • 1970-01-01
      • 2018-05-16
      • 2020-04-20
      • 2018-12-05
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      相关资源
      最近更新 更多