Поиск по сайту:

Как войти в Docker Hub и частные реестры с помощью интерфейса командной строки Docker


Новая установка Docker по умолчанию использует общедоступное взаимодействие с Docker Hub. Вход в систему позволяет вам получить доступ к вашему личному контенту и воспользоваться менее строгими ограничениями скорости API Docker.

В этом руководстве мы покажем, как войти в Docker CLI, охватывая как аутентификацию Docker Hub, так и ваши собственные частные реестры. Мы также рассмотрим некоторые распространенные проблемы с хранилищем учетных данных Docker.

Вход в Docker Hub

Вход в Docker Hub позволяет Docker CLI получить доступ к частному контенту, доступному для вашей учетной записи. Это также даст вам более высокий порог ограничения скорости в 200 извлечений изображений за шесть часов вместо 100 извлечений за шесть часов, предлагаемых неаутентифицированным клиентам.

Используйте команду docker login, чтобы указать свои учетные данные и пройти аутентификацию на сервере:

$ docker login
Username: 
Password:

Вам будет предложено ввести имя пользователя и пароль в интерактивном режиме. Docker попытается войти в Docker Hub, используя учетные данные. Вы увидите Вход выполнен успешно, если данные приняты. Docker сохранит выданный токен аутентификации в вашем файле .docker/config.json.

$ docker login

Login Succeeded

Токены доступа для входа в систему 2FA

Учетные записи Docker Hub с включенной двухфакторной аутентификацией должны использовать токен доступа вместо пароля. Используя веб-интерфейс Docker Hub, щелкните значок своего профиля в правом верхнем углу и выберите «Настройки учетной записи» в меню. Используйте левую боковую панель, чтобы перейти на вкладку «Безопасность».

Нажмите синюю кнопку «Новый токен доступа», чтобы создать токен личного доступа. Позаботьтесь о том, чтобы записать отображаемый токен-ключ, так как вы не сможете восстановить его в будущем. Используйте этот токен вместо обычного пароля при запуске docker login в интерфейсе командной строки.

Неинтерактивные входы

Вы можете указать свое имя пользователя и пароль в качестве флагов командной строки:

$ docker login --username demo --password example

Это полезно, когда вы входите в систему программно или как часть конвейера CI. Для повышения безопасности используйте флаг --password-stdin, чтобы указать Docker считать ваш пароль из STDIN. Это позволяет вам передавать файл паролей, предотвращая захват простого текста в истории вашей оболочки и журналах заданий CI.

$ cat password.txt | docker login --username demo --password-stdin

Вход в частные реестры

docker login также позволяет вам входить в собственные реестры. Укажите имя хоста и порт вашего реестра в качестве первого аргумента команды. Docker Hub всегда используется, когда аргумент не указан.

$ docker login registry.example.com
Username: 
Password:

Вы по-прежнему можете использовать флаги --username, --password и --password-stdin при работе с пользовательскими реестрами. Вы можете войти в несколько реестров одновременно — повторите команду docker login столько раз, сколько вам нужно.

Добавление учетных данных вручную

Иногда вам может понадобиться вручную войти в реестр, добавив существующий токен аутентификации в файл конфигурации Docker. Это может быть полезно в средах CI, где вы хотите предоставить предварительно полученный токен в качестве переменной конвейера.

Вы можете добавить токены авторизации самостоятельно, отредактировав файл .docker/config.json. Добавьте новый ключ для своего реестра в поле auths вверху файла. Укажите объект в качестве значения ключа; этому объекту требуется одно свойство auth, содержащее ваш токен. Вот пример реестра registry.example.com:

{
    "auths": {
        "registry.example.com": {
            "auth": "aWxtaW9ud..."
        }
    }
}

Вы можете добавить токен Docker Hub, используя https://index.docker.io/v1/ в качестве URL-адреса реестра.

Несколько учетных записей для одного реестра

Существенным ограничением механизма аутентификации является его требование, чтобы реестры сопоставлялись один к одному с учетными записями пользователей. Изначально невозможно одновременно войти в систему для нескольких пользователей в одном и том же реестре. Это часто желательно, когда вы используете частный реестр, который разделяет разрешения на проекты или группы.

Вы можете смягчить проблему, разделив свои учетные данные на несколько файлов конфигурации. Интерфейс командной строки Docker использует флаг --config или переменную среды DOCKER_CONFIG, чтобы определить файл для загрузки при каждом вызове.

# Authenticate as user-1
$ docker --config ~/docker/user-1.conf login registry.example.com --username user-1 --password foobar

# Authenticate as user-2
$ docker --config ~/docker/user-2.conf login registry.example.com --username user-2 --password foobar

# Pull an image from registry.example.com as user-1
$ docker --config ~/docker/user-1.conf pull my-team/my-project:latest

# Push an image to registry.example.com as user-2
$ docker --config ~/docker/user-2.conf push my-team/my-project:latest

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

alias docker="docker --config ~/docker/$(basename $PWD).conf $1"

Помощники по учетным данным

Docker по умолчанию небезопасно хранит ваши учетные данные в ~/.docker/config.json. Вы можете усилить защиту, интегрировав вспомогательную утилиту учетных данных. Включенные помощники могут обрабатывать команды учетных данных store, get и erase, выдаваемые Docker в ответ на операции CLI.

Вы можете связать реестр с определенной вспомогательной утилитой, используя поле credHelpers в файле конфигурации:

{
    "credHelpers": {
        "registry.example.com": "pass"
    }
}

В этом примере используется помощник по учетным данным pass для сохранения учетных данных для registry.example.com в Pass вместо файла конфигурации. Помощник Pass предоставляется как часть пакета Docker docker-credential-helpers, который также включает интеграцию с цепочкой ключей macOS, диспетчером учетных данных Windows и секретной службой D-Bus.

Выход

Вы можете выйти, либо вручную удалив раздел реестра из файла .docker/config.json, либо с помощью команды docker logout.

$ docker logout

Как и docker login, выходы по умолчанию нацелены на Docker Hub. Вы можете выйти из частного реестра, передав его имя хоста в качестве единственного аргумента команды:

$ docker logout registry.example.com

Общие проблемы

Большинство проблем с аутентификацией Docker связаны с отсутствием или неправильными учетными данными. Если вы ранее входили в систему, но аутентификация не работает, попробуйте выйти и снова войти:

$ docker logout
# OR
$ docker logout registry.example.com

$ docker login
# OR
$ docker login registry.example.com

Постоянно отклоняемые учетные данные могут указывать на проблему с вашей учетной записью реестра. В случае Docker Hub убедитесь, что вы следовали приведенным выше инструкциям, чтобы использовать токен личного доступа вместо пароля с учетными записями, защищенными 2FA.

Путаница также может возникнуть, если у вас есть несколько файлов конфигурации Docker. Убедитесь, что вы используете флаг --config или переменную среды DOCKER_CONFIG, чтобы загружать правильный каждый раз, когда вы отправляете и извлекаете изображения.

Краткое содержание

Подключение Docker CLI к вашей учетной записи Docker Hub или частному реестру обычно лучше всего выполняется с помощью команды docker login. Вы можете предоставить учетные данные в интерактивном режиме, в виде флагов или через переданный файл паролей. Убедитесь, что вы используете токен личного доступа вместо пароля, если у вас включена двухфакторная аутентификация.

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




Все права защищены. © Linux-Console.net • 2019-2024