Автоматический вход в докер в 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
+ сверху