web-dev-qa-db-fra.com

Docker Compose n'autorise pas l'utilisation d'images locales

La commande suivante échoue, en essayant d'extraire 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 recherche pas parmi les images stockées localement?


Ceci est 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
35
Victor Dombrovsky

En général, cela devrait fonctionner comme vous le décrivez. J'ai essayé de le reproduire, mais cela a tout simplement fonctionné ...

Structure du dossier:

.
├── docker-compose.yml
└── Dockerfile

Contenu de Dockerfile:

FROM Alpine
CMD ["echo", "i am groot"]

Construire et taguer l'image:

docker build -t groot .
docker tag groot:latest groot:staging

avec docker-compose.yml:

version: '3.1'
services:
  groot:
    image: groot:staging

et lancez docker-compose:

$ docker-compose up
Creating groot_groot ... 
Creating groot_groot_1 ... done
Attaching to groot_groot_1
groot_1  | i am groot
groot_groot_1 exited with code 0
46
n2o

Dans votre fichier docker-compose.yml, vous pouvez spécifier build: . au lieu de build: <username>/repo> pour les versions locales (plutôt que d'extraire de docker-hub). Je ne peux pas le vérifier pour le moment, mais je vous crois peut pouvoir créer des chemins relatifs pour plusieurs services vers le fichier docker-compose.

services:
  app:
    build: .

Référence: https://github.com/gvilarino/docker-workshop

12
Denis Tsoi

Il se peut que vous deviez modifier votre balise d'image pour que deux parties soient séparées par une barre oblique /. Donc au lieu de

chat-server:staging

faire quelque chose comme:

victor-dombrovsky/chat-server:staging

Je pense qu'il y a une certaine logique derrière les tags Docker et les tags "une partie" sont interprétés comme des images officielles provenant de DockerHub.

7
Tom Saleeba

Ajoutant à la réponse de @Tom Saleeba,

Il me restait encore des erreurs après avoir marqué le conteneur avec "/" (par exemple: victor-dombrovsky/docker-image:latest) Il continuait à chercher l'image depuis le serveur distant docker.io.

registry_address/docker-image

Il semble que l'URL avant "/" soit l'adresse de registre et après "/" le nom de l'image. et sans "/" fourni, docker-compose recherche par défaut l'image à partir du fichier docker.io distant.

Il semble que ce soit un bug conn avec docker-compose

J'ai finalement réussi à le faire fonctionner par en exécutant le registre local , en le poussant vers le registre local avec la balise de registre et en extrayant l'image du registre local.

$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
$ docker tag your-image-name:latest localhost:5000/your-image-name
$ docker Push localhost:5000/your-image-name

puis changez l'URL de l'image dans le fichier docker:

version: '3'
services:
  chat-server:
    image: chat-server:staging
    ports:
      - "8110:8110"
  web-server:
    image: localhost:5000/your-image-name #####change here
    ports:
      - "80:80"
      - "443:443"
      - "8009:8009"
      - "8443:8443"

De même pour l'image du serveur de discussion.

1
Minjeong Choi