Цель: каждое утро входить в ECR на моем Mac.
У меня есть задание cron следующим образом (crontab -e
, пользователь: rad
):
30 8 * * * /usr/local/bin/aws ecr get-login-password --region eu-central-1 | /usr/local/bin/docker login --username AWS --password-stdin 123456789012.dkr.ecr.eu-central-1.amazonaws.com
Но я получаю следующую ошибку (в моей почте):
rom [email protected] Sun Dec 13 00:00:00 2020
X-Original-To: rad
Delivered-To: [email protected]
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <rad@mac> /usr/local/bin/aws ecr get-login-password --region eu-central-1 | /usr/local/bin/docker login --username AWS --password-stdin 123456789012.dkr.ecr.eu-central-1.amazonaws.com
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=rad>
X-Cron-Env: <USER=rad>
Date: Sun, 13 Dec 2020 00:00:00 +0000
Error saving credentials: error storing credentials - err: exit status 1, out: `Write permissions error.`
Я также добавил --config ~/.docker
(и --config /User/rad/.docker
) в команду docker
, но это не помогло.
Для записи команда отлично работает, когда я запускаю ее в своем терминале. Права доступа к моему каталогу ~/.docker
:
ll -d ~/.docker
drwxr-xr-x 11 rad staff 352B Dec 13 11:15 /Users/rad/.docker
Есть этот похожий вопрос, но это не помогло.
ОТВЕТ (кредит принадлежит @BMitch): Нет необходимости настраивать задание cron. Просто добавьте следующее в ~/.docker/config.json
(если у вас нет Docker для рабочего стола, сначала установите помощник):
{
"credHelpers": {
"123456789012.dkr.ecr.eu-central-1.amazonaws.com": "ecr-login"
}
}
Похоже, это сообщение об ошибке исходит из хранилища учетных данных . На Mac он пытается использовать osxkeychain, но не может сделать это из cron (что, вероятно, хорошо для безопасности) и сбой сценария. Два варианта, о которых я могу думать:
Попытайтесь отключить osxkeychain для учетных данных Docker. Вы можете установить "credsStore": ""
(пустую строку) в .docker/config.json
. Однако многие из тех, кто пробовал это, заканчивали тем, что докер сбрасывал значение на значение по умолчанию, что имеет смысл, поскольку пустая строка — это то же самое, что и не сброшенная в Go.
Другой способ отключить osxkeychain внутри самого OSX KeyChain. Снимите флажок с параметра, позволяющего хранить учетные данные Docker, и Docker должен вернуться к традиционной строке в кодировке base64 в файле .docker/config.json
. Ни один из них не идеален для безопасности.
Вероятно, лучший вариант — попробовать Amazon Credential Helper ECR Credential Helper, который избавит вас от необходимости решать эту проблему с помощью cron-скрипта, и больше не нужно отключать Docker от использования хранилища учетных данных по умолчанию.
[Предыдущее предложение]
Обязательно установите переменную среды HOME, поскольку ее можно использовать для определения места хранения файла .docker/config.json
. Некоторые версии cron позволяют это в верхней части файла:
HOME=/home/rad
30 8 * * * /usr/local/bin/aws ecr get-login-password --region eu-central-1 | /usr/local/bin/docker login --username AWS --password-stdin 123456789012.dkr.ecr.eu-central-1.amazonaws.com
Но многим реализациям cron этот набор требуется в команде, которую вы запускаете:
30 8 * * * export HOME=/home/rad; /usr/local/bin/aws ecr get-login-password --region eu-central-1 | /usr/local/bin/docker login --username AWS --password-stdin 123456789012.dkr.ecr.eu-central-1.amazonaws.com
@rad Попробуйте помощник по учетным данным ECR. И если это не сработает, вам может понадобиться найти способ отключить использование докером хранилища учетных данных в OSX, что кажется нетривиальным.
Спасибо. Я пошел с помощником. Интересно, что он уже установлен (думаю, с Docker for Desktop).
Спасибо за ответ, но это не помогло. У меня есть еще одно письмо, похожее на предыдущие, но с еще одним
X-Cron-Env: <HOME=/Users/rad>
: