0
votes

Comment puis-je exécuter un script après le début du processus dans Docker?

  1. Je veux exécuter cette commande dans Docker. xxx

    Cette commande commence KAFKA Connect et connecté à mon hub d'événement Azure.

    1. Une fois que le kafka est connecté, je souhaite exécuter le fichier de script dans Docker.

      ./ script.sh

      Dans ce script vérifie si Kafka est connecté avec succès. S'il n'est pas connecté, attendez la connexion. Une fois la connexion terminée, vérifiez si les connecteurs de noms XYZ non disponibles, Créez-le, sinon le script est terminé. Je suis capable de faire ces choses sur une machine locale mais je ne suis pas dans Docker.


1 commentaires

Comment le feriez-vous sans docker? Qu'est-ce qui ne fonctionne pas si vous passez à Kafka basé à Docker?


3 Réponses :


-1
votes

Exécutez votre script en tant que processus d'arrière-plan qui continuera à vérifier que Kafka est connecté ou non. Une fois connecté, il exécutera ses commandes et sa sortie et votre commande principale continuera à courir et que Docker ne quitte pas

par exemple. P>

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


3 commentaires

Vous ne pouvez pas lancer de processus d'arrière-plan dans un dockerfile. Cette commande exécuter n'aura aucun effet du tout.


Oui, mon mauvais, merci d'avoir souligné cela, j'ai édité la réponse


Merci, Saurabh!



0
votes

Je devais faire quelque chose de similaire à attendre que dB initialiser avant le démarrage du serveur, sinon cela échouerait / quitterait avant que le processus complet de composition ait été effectué. J'ajoute un script d'entréePoint au serveur avec quelque chose comme ci-dessous.

J'imagine qu'il existe un moyen d'appeler votre service et d'envoyer la commande à cesser de fumer immédiatement. Vous devrez peut-être installer les outils de base sur cette autre image. P>

Donc, j'ai une image dB. J'ai besoin d'installer Basic DB Connect (PSQL, SQLCMD) sur l'image du serveur pour pouvoir contacter mon conteneur DB pour vous assurer qu'il s'exécute. P>

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


0 commentaires

0
votes

Voulez-vous exécuter cette commande dans Docker. ./kafka_2.12-2.1/bin/connect-distributed.sh

confluenc / cp-kafka-connect Les images fonctionnent déjà

Vous ne devez pas exécuter Connect et courtiers sur les mêmes machines ou plusieurs processus dans un conteneur


0 commentaires