web-dev-qa-db-fra.com

«docker pull» renvoie «refusé: accès interdit» à partir du registre privé de gitlab

J'ai un Dockerfile qui va être implémenté FROM l'image d'un registre privé. Je crée ce fichier sans aucun problème avec Docker version 1.12.6, build 78d1802 et docker-compose version 1.8.0, build unknown, mais sur une autre machine qui a Docker version 17.06.1-ce, build 874a737 et docker-compose version 1.16.1, build 6d1ac21, les docker-compose build Retour:

FROM my.private.gitlab.registry:port/image:tag
http://my.private.gitlab.registry:port/v2/docker/image/manifests/tag: denied: access forbidden

docker pull my.private.gitlab.registry:port/image:tag renvoie la même chose.

Notez que j'ai essayé d'obtenir my.private.registry:port/image:tag et http://my.private.registry:port/v2/docker/image/manifests/tag a été capturé.

9
Zeinab Abbasimazar

S'il s'agit d'un registre authentifié, vous devez exécuter docker login <regitsryurl> sur la machine sur laquelle vous le construisez.

Cela ne doit être effectué qu'une seule fois par hôte. La commande met ensuite en cache l'auth dans un fichier

$ cat ~/.docker/config.json
{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "......="
        }
    }
}
14
Tarun Lalwani

Je remarque que votre schéma d'URL utilise le protocole http - Docker doit être configuré pour autoriser les registres non sécurisés.

Créez ou modifiez votre daemon.json (requis dans l'un des emplacements suivants):

Linux: /etc/docker/

Les fenêtres: C:\ProgramData\Docker\config\

Avec le contenu:

{
    "insecure-registries" : [ "my.private.gitlab.registry:port" ]
}

Redémarrez ensuite Docker (pas seulement la session du terminal) et réessayez.

Une fois connecté avec:

docker login my.private.gitlab.registry:port

Selon la réponse de tarun-lalwani , cela devrait ensuite ajouter l'auth dans la configuration, pour une utilisation future (docker pull, etc.).

4
Michael

Une connexion n'a pas résolu le problème pour moi. Cela peut être spécifique à Mac, mais juste au cas où: problème Git

Mon commentaire sur la question:

Je rencontre également ce problème.

Dockerfile:

FROM <insert_private_registry>/test-image:latest

CLI

Les deux commandes échouent sans connexion au registre privé (attendu)

    $ docker-compose up
    Building app
    Step 1/2 : FROM <insert_private_registry>/test-image:latest
    ERROR: Service 'app' failed to build: Get https://<insert_private_registry>/v2/test-image/manifests/latest: denied: access forbidden

    $ docker pull <insert_private_registry>/test-image:latest
    Error response from daemon: Get https://<insert_private_registry>/test-image/manifests/latest: denied: access forbidden

Une fois connecté, un docker pull ... fonctionne tandis que le docker-compose up ne parvient pas à extraire l'image:

    $ docker login <insert_private_registry>
    Username: <insert>
    Password: <insert>
    Login Succeeded

    $ docker-compose up
    Building app
    Step 1/2 : FROM <insert_private_registry>/test-image:latest
    ERROR: Service 'app' failed to build: Get https://<insert_private_registry>/v2/test-image/manifests/latest: denied: access forbidden

    $ docker pull <insert_private_registry>/test-image:latest
    latest: Pulling from <insert_private_image_path>/test-image
    ...
    Status: Downloaded newer image for <insert_private_registry>/test-image:latest

Solution actuelle

Notre solution de contournement actuelle consiste à extraire explicitement l'image avant d'exécuter les conteneurs docker-compose:

    docker pull <insert_private_registry>/test-image:latest
    latest: Pulling from <insert_private_image_path>/test-image
    ...
    Status: Downloaded newer image for <insert_private_registry>/test-image:latest

    $ docker-compose up
    Building app
    Step 1/2 : FROM <insert_private_registry>/test-image:latest
    ...
0
Isaiah