последний тег не найден при извлечении докера с помощью частного реестра

У меня проблемы с извлечением изображений, помещенных в частный реестр, и получением:

Последний тег не найден в репозитории

Я использую контейнер реестра по умолчанию, предоставленный Docker:

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry            latest              7e2db37c6564        8 days ago          411.6 MB
janos/wheezy        latest              900e813f1fd9        11 months ago       218.6 MB

В качестве теста предположим, что я хочу иметь локальную версию wheezy:

# docker tag janos/wheezy staging-docker.mysite.nl/myself/wheezy
# docker push staging-docker.mysite.nl/myself/wheezy
The push refers to a repository [staging-docker.mysite.nl/myself/wheezy] (len: 1)
Sending image list
Pushing repository staging-docker.mysite.nl/myself/wheezy (1 tags)
7af801e4faa1: Pushing [==================================================>] 226.3 MB/226.3 MB
2014/11/21 16:06:38

Картинка вроде есть:

# docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry                               latest              7e2db37c6564        8 days ago          411.6 MB
staging-docker.mysite.nl/myself/wheezy   latest              900e813f1fd9        11 months ago       218.6 MB
janos/wheezy                           latest              900e813f1fd9        11 months ago       218.6 MB

И локально я могу запустить его:

# docker run -i -t staging-docker.mysite.nl/myself/wheezy /bin/bash
root@6b5fafe61d88:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var
root@6b5fafe61d88:/# exit

Но при попытке запустить или вытащить его с другого сервера я получаю «Последний тег не найден».

# docker pull staging-docker.mysite.nl/myself/wheezy
Pulling repository staging-docker.mysite.nl/myself/wheezy
2014/11/21 16:08:15 Tag latest not found in repository staging-docker.mysite.nl/myself/wheezy

Явное добавление «последнего» не помогает. Та же ошибка.

Я вижу, что вызовы поступают в реестр, поэтому я случайно не использую другой:

172.17.42.1 - - [21/Nov/2014:15:08:15 +0000] "GET /v1/_ping HTTP/1.0" 200 1439 "-" "Go 1.1 package http"
172.17.42.1 - - [21/Nov/2014:15:08:15 +0000] "GET /v1/_ping HTTP/1.0" 200 1439 "-" "Go 1.1 package http"
21/Nov/2014:15:08:15 +0000 DEBUG: args = {'namespace': u'myself', 'repository': u'wheezy'}
172.17.42.1 - - [21/Nov/2014:15:08:15 +0000] "GET /v1/repositories/myself/wheezy/images HTTP/1.0" 200 164 "-" "docker/1.3.1 go/go1.3.3 git-commit/4e9bbfa kernel/3.16.0-0.bpo.2-amd64 os/linux arch/amd64"
21/Nov/2014:15:08:15 +0000 DEBUG: args = {'namespace': u'myself', 'repository': u'wheezy'}
21/Nov/2014:15:08:15 +0000 DEBUG: [get_tags] namespace=myself; repository=wheezy
172.17.42.1 - - [21/Nov/2014:15:08:15 +0000] "GET /v1/repositories/myself/wheezy/tags HTTP/1.0" 200 2 "-" "docker/1.3.1 go/go1.3.3 git-commit/4e9bbfa kernel/3.16.0-0.bpo.2-amd64 os/linux arch/amd64"

И при проверке тегов изображения вручную они действительно пусты:

# curl -k https://staging-docker.mysite.nl/v1/repositories/myself/wheezy/tags
{}

Вопрос 1: почему он изначально пуст, ведь Docker всегда использует последний...

Вопрос 2: если что-то пошло не так и последний тег действительно исчез, почему я все еще могу запустить его локально?

Версии Docker одинаковы на обоих серверах:

# docker version 
Client version: 1.3.1
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 4e9bbfa
OS/Arch (client): linux/amd64
Server version: 1.3.1
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 4e9bbfa

person Hans    schedule 21.11.2014    source источник
comment
Последний тег все еще там, проблема с удаленным реестром. Может попробовать запустить локальную? (docker run -p5000:5000 registry) и попробовать оттолкнуть/вытащить из него? (docker tag myself/wheezy 127.0.0.1:5000/myself/wheezy && docker push 127.0.0.1:5000/myself/wheezy), чтобы убедиться, что это работает.   -  person creack    schedule 21.11.2014
comment
ты прав. Это сработало (пришлось использовать --insecure-repository), но я все еще не понимаю, что пошло не так в первый раз. Единственное, что я могу себе представить, это то, что я ничего не менял в базовом образе (janos/wheezy), прежде чем снова пометить его как себя/wheezy. На этот раз я изменил его (простым касанием TEST_REPO в корневом каталоге) перед фиксацией изображения, а затем пометил его, и все заработало нормально. Думаю, я все еще не совсем понимаю логику тегов. Спасибо!   -  person Hans    schedule 24.11.2014
comment
Это старо и почти наверняка больше не проблема, но у меня возникла эта проблема после переключения репо с общедоступного на частный. Войдите снова в командную строку, чтобы решить эту проблему для меня.   -  person Justin    schedule 18.04.2016


Ответы (2)


Я заметил, что сообщения об ошибках клиента Docker не всегда отражают основную причину. Я видел, как это происходило, когда клиент докера не аутентифицировался на сервере, а также когда по какой-то причине не удавалось рукопожатие SSL. Учитывая, что вы не использовали --insecure-registry, похоже на последнее.

person Slack Flag    schedule 18.12.2015

Вопрос 1:

Это должно быть проблема в вашем удаленном частном реестре, это подтверждается вашей командой

curl -k https://staging-docker.mysite.nl/v1/repositories/myself/wheezy/tags

Вопрос 2

тег — это просто псевдоним для образа докера, если вы запускаете локально под другим именем, все они запускаются из одних и тех же образов докера, без разницы.

И тег latest локально не теряется, что подтверждается вашей командой

$ docker images

Решение

Проверьте настройку частного реестра докера и отследите журнал, чтобы увидеть, в чем проблема. Если вы хотите решить ее полностью, вам нужно добавить дополнительную отладочную информацию в удаленный частный реестр.

Также как настройка удаленного реестра похожа на версию и платформу.

person Larry Cai    schedule 07.12.2014