J'utilise Docker Swarm et je souhaite déployer un service avec docker-compose
. Mon service utilise une image personnalisée appelée myuser/myrepo:mytag
que j'ai déployé avec succès sur Docker-Hub vers un référentiel privé.
Mon docker-compose ressemble à ceci:
version: "3.3"
services:
myservice:
image: myuser/myrepo:mytag
ports:
- "8080:8080"
Avant d'exécuter, j'ai réussi à tirer l'image avec: docker pull myuser/myrepo:mytag
Quand je lance docker stack deploy -c docker-compose.yml myapp
Je reçois toujours l'erreur: "No such image: myuser/myrepo:mytag"
.
Fait intéressant, exécuter le même fichier en utilisant uniquement: docker-compose up
(c'est-à-dire sans mode essaim) tout fonctionne bien et le service démarre.
Je ne comprends vraiment pas pourquoi cela échoue? J'ai déjà essayé de nettoyer Docker avec docker system Prune
puis repousser mon image, sans succès.
Déjà trouvé la solution. Mon image est hébergée sur un référentiel privé. Outre le gestionnaire d'essaim (où j'ai exécuté les commandes), j'avais un travailleur d'essaim en cours d'exécution.
Quand j'ai couru docker stack deploy -c docker-compose.yml myapp
docker a déployé le service sur le nœud de travail (pas le nœud de gestionnaire comme je le pensais). Au niveau du nœud de travail, Docker n'avait pas d'informations d'identification pour extraire l'image du référentiel privé. Par conséquent, pour résoudre ce problème, passez le drapeau --with-registry-auth
(qui envoie les informations d'identification du référentiel au nœud de travail) ou assurez-vous que le service est déployé sur un nœud où l'image est présente.
Voir: https://docs.docker.com/engine/reference/commandline/deploy/
J'ai eu un problème similaire sur Mac lorsque j'étais derrière le pare-feu d'entreprise.
Je n'ai pu résoudre qu'après m'être connecté directement à Internet.
Juste pour mettre à jour, pendant que je suis sur VPN, je peux accéder à Internet sans aucun paramètre de proxy et je peux télécharger des images (docker) très bien avec docker run
. Le problème ne concerne que docker-compose
.
J'ai essayé de changer le serveur de noms en 8.8.8.8 dans resolv.conf dans mes machines virtuelles, mais le problème n'a pas été résolu.