Vous avez une entrée DOCKER_HOST dans votre .env.
D'après l'aspect de votre fichier .env, vous semblez avoir configuré docker-compose
pour utiliser un hôte docker distant :
DOCKER_HOST=tcp://***.***.**.**:2376
De plus, ce .env n'est chargé que par docker-compose
mais pas docker
. Donc, dans cette situation, votre docker images
ne représente pas les images disponibles lors de l'exécution du programme. docker-compose
.
En cours d'exécution docker-compose
vous exécutez réellement Docker sur l'hôte distant tcp://***.***.**.**:2376
Pourtant, lorsque vous exécutez docker
par lui-même, vous exécutez Docker localement.
Lorsque vous exécutez docker images
vous voyez en effet une liste des images stockées localement sur votre ordinateur. Mais docker-compose up -d
va tenter de démarrer les conteneurs non pas sur votre machine locale, mais sur ***.***.**.**:2376
. docker images
ne vous montrera pas quelles images sont disponibles sur l'hôte Docker distant, à moins que vous ne définissiez l'option DOCKER_HOST
variable d'environnement, comme ceci par exemple :
DOCKER_HOST=tcp://***.***.**.**:2376 docker images
De toute évidence, l'hôte Docker distant ne dispose pas de l'option web-server:staging
L'image n'est pas stockée ici, et elle n'est pas non plus disponible sur le hub de Docker. C'est pourquoi Docker se plaint de ne pas pouvoir trouver l'image.
Solutions
Exécuter le conteneur localement
Si votre intention est d'exécuter le conteneur localement, il suffit de supprimer l'option DOCKER_HOST=...
de votre fichier .env et réessayez.
Pousser l'image vers un référentiel.
Cependant, si vous prévoyez d'exécuter l'image à distance sur le DOCKER_HOST donné, vous devriez probablement la pousser vers un dépôt. Vous pouvez créer un dépôt gratuit sur Docker Hub, ou vous pouvez héberger votre propre dépôt quelque part, et utiliser la commande docker push
pour y pousser l'image, puis assurez-vous que votre docker-compose.yml référence le bon dépôt.
Enregistrez l'image, chargez-la à distance.
Si vous ne voulez pas pousser l'image vers Docker Hub ou héberger votre propre dépôt, vous pouvez aussi transférer l'image en utilisant une combinaison de docker image save
y docker image load
:
docker image save web-server:staging | DOCKER_HOST=tcp://***.***.**.**:2376 docker image load
Notez que cela peut prendre un certain temps pour les grandes images, surtout sur une connexion lente.
3 votes
Pouvez-vous vérifier que l'image du serveur web a été construite localement ? Veuillez inclure l'image du serveur web.
docker-compose.yml
fichier0 votes
Peut-être que l'une d'entre elles fonctionnera : redémarrer le service Docker, recréer l'image du serveur Web avec Docker Build, puis essayer d'exécuter Docker Compose.
0 votes
@DenisTsoi J'ai ajouté mon fichier docker-compose. Comment dois-je vérifier que l'image a été construite localement ? J'ai fourni la sortie de
docker images
qui liste mon image. Je suppose que cela vérifie que l'image a bien été construite ici.0 votes
Je suppose que vous n'avez pas poussé
web-server
ochat-server
adocker-hub
alors vous devrez peut-être le référencer en tant que chemin relatif.0 votes
@DenisTsoi L'image a été construite en utilisant
docker build -t chat-server:staging .
commandement.0 votes
@DenisTsoi Oui, je ne l'ai pas poussé vers Docker Hub. Mais le fait est que je ne veux pas le faire. Puis-je éviter de télécharger des images sur Docker Hub et utiliser mes images existantes localement ?
1 votes
Oui - vous pouvez. Si vous utilisez docker-compose, vous pouvez utiliser des chemins relatifs. supprimez le fichier existant
docker containers
-docker rm -f chat-server:staging
,docker rm -f web-server:staging
. - utilisez la réponse ci-dessous pour ajouter un chemin relatif.1 votes
Utiliser également
docker-compose images
docker-compose ps
pour voir si vos images/conteneurs sont à l'intérieur dedocker-compose
0 votes
Laissez-nous continuer cette discussion dans le chat .
1 votes
Que diriez-vous d'essayer avec l'identification partielle
image: b94573990687
0 votes
Il semble que la balise d'image de docker préfère qu'elle commence par un nombre et non par une chaîne. D'après notre expérience, au lieu de web-server:staging, essayez web-server:1-staging ou web-server:{number}.staging