Автоматический вход в докер в bash script

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

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

Имя пользователя: FATA [0000] неприемлемый ioctl для устройства


Команда, которую я использовал, следующая:

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


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

Ответ 1

Докер 18 и выше

Там теперь официально документированный способ сделать это:

cat ~/my_password.txt | docker login --username foo --password-stdin

Докер от 1.11 до Докер 17

Вы можете передать все аргументы в командной строке:

docker login --username=$DOCKER_USER --password=$DOCKER_PASS $DOCKER_HOST

Если вы не укажете DOCKER_HOST, вы получите основной DOCKER_HOST Docker. Если вы пропустите какой-либо из аргументов, вам будет предложено ввести этот аргумент.

Старше 1.11

Тот же путь, что и выше, за исключением того, что вам также нужно передать флаг --email. Содержимое этого на самом деле не проверяется, так что все в порядке:

docker login --username=$DOCKER_USER --password=$DOCKER_PASS $DOCKER_HOST --email [email protected]

Ответ 2

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

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

Ответ 3

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

Содержимое этого файла:

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

Add-on Если вы хотите войти в систему с несколькими файлами docker на одном сервере, просто добавьте еще одну информацию об этом. Например:

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

Теперь вы можете нажать и вытащить изображения из example.com и example1.com.

Ответ 4

Для любого случайного прохожего, который может наткнуться на это в поисках способа использовать его в реестре контейнера среды 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

Выше 3 вещи:

  • Проходит токен, полученный из Openshift oc whoami -t
  • Определяет URI реестра Openshift

    $(oc get route docker-registry -n default --no-headers | awk '{print $2}'')
    
  • Вход в реестр с помощью токена $USER + сверху