0

Автоматический вход в Docker через Bash-скрипт

11

Как предварительно ввести свои учетные данные для команды docker login в скрипте?

Я использую bash-скрипт, который автоматизирует весь процесс настройки моих пользовательских виртуальных машин и т.д. Однако, когда мне нужно войти в Docker в рамках скрипта, чтобы скачать образы, я получаю следующую ошибку:

Username: FATA[0000] inappropriate ioctl for device

Я использовал следующую команду:

( echo "xxx"; echo "yyy"; echo "zzz" ) | docker login docker.somesite.org

Возможно ли это реализовать без использования и копирования существующего файла .dockercfg, и как это сделать?

Заранее спасибо.

4 ответ(ов)

0

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

Вот пример, как это можно сделать:

echo $DOCKER_PASS | docker login -u$DOCKER_USER --password-stdin $DOCKER_HOST

В данном случае переменные окружения $DOCKER_PASS, $DOCKER_USER и $DOCKER_HOST представляют собой ваш пароль, имя пользователя и адрес Docker-реестра соответственно.

0

Когда вы входите в свою частную реестр, Docker автоматически создаёт файл $HOME/.docker/config.json. Этот файл содержит информацию о ваших учетных данных, так что вы можете сохранить его и скопировать на любой хост, когда вам нужно войти в реестр.

Содержимое файла выглядит следующим образом:

{
     "auths": {
                   "example.com": {
                                    "auth": "xxxxxxxxxxxxxxxxxxxxxxx"
                    }
            }
}

Дополнительно, если вы хотите войти в несколько реестров Docker на одном сервере, просто добавьте другую информацию о авторизации следующим образом:

{
     "auths": {
                   "example.com": {
                                    "auth": "xxxxxxxxxxxxxxxxxxxxxxx"
                    },
                    "example1.com": {
                                    "auth": "xxxxxxxxxxxxxxxxxxxxxxx"
                    }
            }
}

Теперь вы можете загружать и выгружать образы с example.com и example1.com.

0

Для случайного прохожего, который может натолкнуться на это решение в поисках способа аутентификации в реестре контейнеров OpenShift (Docker), вы можете использовать следующий пример, чтобы указать URI реестра вместе с учетными данными для входа, используя токен OpenShift:

$ echo "$(oc whoami -t)" | docker login -u $USER --password-stdin \
    $(oc get route docker-registry -n default --no-headers | awk '{print $2}')
Login Succeeded

Этот код выполняет три основные операции:

  1. Извлекает токен с помощью команды OpenShift oc whoami -t.

  2. Определяет URI реестра OpenShift:

    $(oc get route docker-registry -n default --no-headers | awk '{print $2}')
    
  3. Выполняет вход в реестр, используя имя пользователя $USER и токен, полученный на предыдущем шаге.

Таким образом, вы сможете легко аутентифицироваться в реестре Docker на OpenShift.

0

У меня были серьезные проблемы с этим, и хотел добавить, что переменная окружения DOCKER_HOST имеет особое значение для Docker, так как она определяет сокет демона, с которым он подключается, что может привести к сбоям при попытке входа. Полный список переменных окружения, которые использует Docker, можно найти здесь: https://docs.docker.com/engine/reference/commandline/cli/

Я изменил свои переменные окружения на что-то другое, например, REG_, и это сработало:

docker login --username $REG_USERNAME --password $REG_PASSWORD $REG_HOST

Обратите внимание, что если вы делаете это в GitLab Runner, нет необходимости использовать флаг --password-stdin, если вы уже используете маскирование переменных (вы можете его использовать, но нет необходимости).

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь