1
votes

Exécutez docker-compose à partir du conteneur Docker

J'ai Jenkins en cours d'exécution dans un conteneur Docker avec docker.sock monté. Puis-je appeler docker-compose à partir de ce conteneur pour exécuter un service sur la machine hôte? J'ai essayé d'exécuter le script d'installation à partir d'un conteneur, mais cela continue à dire

"aucun fichier ou répertoire de ce type".

docker exec jenkins curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

docker exec jenkins chmod +x /usr/local/bin/docker-compose


3 commentaires

Quelle image de docker utilisez-vous pour ce conteneur jenkins? Il devrait y avoir docker-compose installé


J'utilise le dernier Blue Ocean


Pourriez-vous publier le fichier jenkins que vous utilisez pour la construction?


3 Réponses :


0
votes

C'est réalisable mais difficile à faire.

Vous devez monter avec un volume docker le chemin du fichier docker-compose.yml sur votre hôte docker, exactement au même emplacement dans le conteneur.

Donc, si l'emplacement du fichier docker-compose.yml est /home/leonid/workspace/project1/docker-compose.yml sur l'hôte du docker, vous devez ajouter le volume -v / home / leonid / workspace / project1 /: / home / leonid / workspace / project1 / pour le conteneur jenkins.

Ensuite, dans votre travail Jenkins:

cd /home/leonid/workspace/project1/
docker-compose up -d


3 commentaires

Je suppose que je n'étais pas assez clair, obtenir le docker-compose.yml n'est pas le problème car il est récupéré depuis git, le problème est que le binaire docker-compose réel n'existe pas dans le conteneur et je ne sais pas comment le faire fonctionner de l'intérieur


Alors, vous ne savez pas comment l'installer?


Je suppose que oui, ma tentative de l'installer avec docker exec n'a pas abouti



0
votes

Créez votre propre fichier docker basé sur l'image que vous utilisez pour la construction (probablement docker: dernier)

Ensuite, dans la ligne RUN, téléchargez le docker-compose et définissez-le comme exécutable.

Faites tourner l'agent jenkins pour créer à partir de votre image au lieu de celle par défaut.

vous devez installer docker-compose sur ce conteneur de construction, pas sur jenkins master.

Pour les builds dans gitlab-ci, j'avais un conteneur de build spécial basé sur l'image docker avec compose installé en plus. Je pense que c'est votre cas - vous utilisez jenkins pour faire tourner un conteneur basé sur docker: latest qui par défaut n'a pas docker-compose. Vous devez créer votre propre image à partir de docker: latest, installer compose ou utiliser une image de docekrhub qui se fait comme ceci.

Vous pouvez également essayer d'installer compose dans le cadre de votre build. Téléchargez-le simplement dans un répertoire local et utilisez-le à partir de là.


2 commentaires

ne serait-ce pas la même chose que docker exec ?


Jenkins crée-t-il un nouveau conteneur pour chaque exécution de build ou s'appuie-t-il sur l'image principale? Si tel est le cas, vous n'aurez pas le temps d'installer avec docker exec car le conteneur ne vit que pendant la construction.



0
votes

La section "Installer en tant que conteneur" de la documentation a fonctionné pour moi: https: // docs .docker.com / compose / install /

sudo curl -L --fail https://github.com/docker/compose/releases/download/1.25.0/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose


0 commentaires