118 votes

Docker Compose ne permet pas d'utiliser des images locales

La commande suivante échoue lorsqu'elle tente de tirer une image du Docker Hub :

$ docker-compose up -d
Pulling web-server (web-server:staging)...
ERROR: repository web-server not found: does not exist or no pull access

Mais je veux juste utiliser une version locale de l'image, qui existe :

$ docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
web-server           staging             b94573990687        7 hours ago         365MB

Pourquoi Docker ne fait pas de recherche parmi les images stockées localement ?


Voici mon fichier Docker Compose :

version: '3'
services:
  chat-server:
    image: chat-server:staging
    ports:
      - "8110:8110"
  web-server:
    image: web-server:staging
    ports:
      - "80:80"
      - "443:443"
      - "8009:8009"
      - "8443:8443"

et mon fichier .env :

DOCKER_HOST=tcp://***.***.**.**:2376
DOCKER_TLS_VERIFY=true 
DOCKER_CERT_PATH=/Users/Victor/Documents/Development/projects/.../target/docker

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 fichier

0 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.

8voto

Yogarine Points 144

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.

7voto

Shantanu Points 1404

Pour moi, mettre "construire : ." a fait l'affaire. Mon fichier docker compose ressemble à ceci,

version: '3.0'
services:
  terraform:
    build: .
    image: tf:staging
    env_file: .env
    working_dir: /opt
    volumes:
      - ~/.aws:/.aws

-2voto

Alisio Meneses Points 34

Dans mes tests, pour que cela fonctionne, vous devez spécifier une balise numérique, sinon docker essaiera de vérifier la dernière version à distance.

Renommez votre image locale en quelque chose comme 'web-server:1' au lieu de 'web-server:staging' et modifiez votre fichier compose en conséquence.

-3voto

Nae Points 5451

On peut référencer le nom de l'image locale sans une étiquette également

docker build -t imagename .

peut être référencé comme :

version: "3"
services:
  web:
    image: imagename

dans le yaml de docker-compose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X