web-dev-qa-db-fra.com

Comment exécuter la commande d'un conteneur Docker à un autre

Je crée une application qui permettra aux utilisateurs de télécharger des fichiers vidéo qui seront ensuite placés par le traitement.

J'ai deux conteneurs.

  1. Nginx Conteneur qui sert le site Web où les utilisateurs peuvent télécharger leurs fichiers vidéo.
  2. Conteneur de traitement vidéo qui a FFmpeg et d'autres éléments de traitement installés.

Ce que je veux réaliser. J'ai besoin de conteneur 1 pour pouvoir exécuter un script Bash sur le conteneur 2.

Une possibilité aussi loin que je peux voir, c'est de les faire communiquer sur http via une API. Mais alors j'aurais besoin d'installer un serveur Web dans le conteneur 2 et d'écrire une API qui semble un peu excentrée. Je veux juste exécuter un script Bash.

Aucune suggestion?

6
Nicolas Buch

Il a été mentionné ici avant, mais une option raisonnable et semi-hacky consiste à installer SSH dans les deux conteneurs, puis à utiliser SSH pour exécuter des commandes sur l'autre conteneur:

# install SSH, if you don't have it already
Sudo apt install openssh-server

# start the ssh service
Sudo service start ssh

# start the daemon
Sudo /usr/sbin/sshd -D &

En supposant que vous ne voulez pas toujours être root, vous pouvez ajouter un utilisateur par défaut (dans ce cas, 'foobob'):

useradd -m --no-log-init --system  --uid 1000 foobob -s /bin/bash -g Sudo -G root

#change password
echo 'foobob:foobob' | chpasswd

Faites ceci sur les conteneurs source et cible. Maintenant, vous pouvez exécuter une commande de conteneur_1 à conteneur_2.

# obtain container-id of target container using 'docker ps'
ssh foobob@<container-id> << "EOL"
echo 'hello bob from container 1' > message.txt
EOL

Vous pouvez automatiser le mot de passe avec SSH-Agent, ou vous pouvez utiliser un peu plus de hacky avec sshpass (installez-le d'abord en utilisant Sudo apt install sshpass):

sshpass -p 'foobob' ssh foobob@<container-id>
0
RexBarker