Проблема с извлечением изображения из частного концентратора

#docker #mesosphere #dcos

#docker #мезосфера #dcos

Вопрос:

У меня следующая проблема: пытаюсь извлечь созданный образ docker из частного концентратора и запустить его как сервис, но появляется следующая ошибка

Failed to launch container: Failed to run 'docker -H unix:///var/run/docker.sock pull r.cfcr.io/path/to/repo/': exited with status 1; stderr='Error: Cannot perform an interactive login from a non TTY device '

вот информация fetch[] config.json, которую я использую для аутентификации :

 {
    "auths": {
        "r.cfcr.io": {
            "auth": "=auth_token="
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/18.06.1-ce (linux)"
    }
}
  

У вас есть какие-либо идеи, как решить проблему?

Комментарии:

1. Какую команду вы используете для извлечения изображения?

2. Это работает, когда я пытаюсь извлечь его через командную строку, но это не удается через пользовательский интерфейс Mesosphere

3. Что вы имеете в виду, чтобы запустить его как сервис?

4. Пользовательский интерфейс мезосферы -> Запустить службу -> Модуль с несколькими контейнерами. Это не удается, когда я пытаюсь создать его таким образом

5. Ошибка показывает, что не удается выполнить интерактивный вход с устройства, отличного от TTY.

Ответ №1:

Вероятно, это не связано с проблемой здесь, но некоторые люди могут столкнуться с точно таким же сообщением при попытке входа в docker с Linux-подобного терминала в Windows, такого как Git bash или Docker quickstart terminal или даже Cygwin.

Хитрость здесь заключается в использовании winpty docker login

или попробуйте использовать эту команду

 docker login "${URL}" -u "${Username}" -p "${PASSWORD}"
  

Комментарии:

1. Проблема в том, что он работает, когда я аутентифицируюсь через командную строку. Соответственно — я могу извлечь изображение и собрать его без каких-либо проблем. Он не работает через пользовательский интерфейс Mesosphere

Ответ №2:

Вы должны сохранить файл config.json в каталоге .docker в $MESOS_SANDBOX. Итак, создайте архив каталога .docker со списком файлов ниже :

 $ tar tvf docker-login.tar                                                                                      
drwx------ parvez/parvez     0 2019-06-12 21:45 .docker/
-rw------- parvez/parvez   177 2019-06-12 21:45 .docker/config.json
  

Извлеките этот архив из конфигурации mesos.

 "fetch": [{ 
              "uri": "https://foo.com/docker-login.tar", 
              "executable": false,
              "extract": true, 
              "cache": true 
          }],
  

Он загрузит и извлечет архив по адресу $ MESOS_SANDBOX path, и извлечение docker должно быть успешным.