Ошибка входа в Docker при сохранении учетных данных: ошибка разрешений на запись

Цель: каждое утро входить в 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"
    }
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
687
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, это сообщение об ошибке исходит из хранилища учетных данных . На Mac он пытается использовать osxkeychain, но не может сделать это из cron (что, вероятно, хорошо для безопасности) и сбой сценария. Два варианта, о которых я могу думать:

  1. Попытайтесь отключить osxkeychain для учетных данных Docker. Вы можете установить "credsStore": "" (пустую строку) в .docker/config.json. Однако многие из тех, кто пробовал это, заканчивали тем, что докер сбрасывал значение на значение по умолчанию, что имеет смысл, поскольку пустая строка — это то же самое, что и не сброшенная в Go.

  2. Другой способ отключить osxkeychain внутри самого OSX KeyChain. Снимите флажок с параметра, позволяющего хранить учетные данные Docker, и Docker должен вернуться к традиционной строке в кодировке base64 в файле .docker/config.json. Ни один из них не идеален для безопасности.

  3. Вероятно, лучший вариант — попробовать 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

Спасибо за ответ, но это не помогло. У меня есть еще одно письмо, похожее на предыдущие, но с еще одним X-Cron-Env: <HOME=/Users/rad>:

Rad 13.12.2020 12:06

@rad Попробуйте помощник по учетным данным ECR. И если это не сработает, вам может понадобиться найти способ отключить использование докером хранилища учетных данных в OSX, что кажется нетривиальным.

BMitch 13.12.2020 12:53

Спасибо. Я пошел с помощником. Интересно, что он уже установлен (думаю, с Docker for Desktop).

Rad 13.12.2020 13:21

Другие вопросы по теме