Различный результат после команды запуска между сценарием оболочки и терминалом

Ситуация

Используйте сценарий оболочки для отправки образов докеров (приложение Nodejs) в ECR.

Команда

aws ecr get-login-password --region ap-southeast-1 | docker login --username AWS --password-stdin xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com

Скрипт файловой оболочки

#!/bin/sh

docker build -t abc/abc-api ../../abc/abc-api

docker build -t abc/abc-fe ../../abc/abc-fe

aws ecr get-login-password --region ap-southeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com

docker tag abc/abc-api xxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/abc:api-latest

docker push xxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/abc:api-latest

docker tag abc/abc-fe xxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/abc:fe-latest

docker push xxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/abc:fe-latest

Текущий

  • При запуске скрипта файловой оболочки
Unable to locate credentials. You can configure credentials by running "aws configure".
Error: Cannot perform an interactive login from a non TTY device
  • При запуске команды на терминале
WARNING! Your password will be stored unencrypted in /home/***/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Что я хочу

Вход в сценарий оболочки выполнен успешно

Окружающая среда

  • линукс мята 20
  • aws-cli 2.0.46
  • Автор aws configure настроил аутентификацию aws

person Leo Aslan    schedule 16.09.2020    source источник
comment
Можете ли вы уточнить, что вы подразумеваете под скриптом продажи и терминалом?   -  person Marcin    schedule 16.09.2020
comment
Я только что обновил сценарий файловой оболочки и некоторое описание   -  person Leo Aslan    schedule 16.09.2020
comment
Когда вы выполняете свой сценарий оболочки?   -  person Marcin    schedule 16.09.2020
comment
Возможно, вам нужно явно указать свой профиль в скрипте, например. aws ecr get-login-password --region ap-southeast-1 --profile <YOUR_AWS_PROFILE_TO_USE> | docker login --username AWS --password-stdin xxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com.   -  person Marcin    schedule 16.09.2020
comment
Я использую сценарий оболочки для развертывания. Я отправляю образы докеров в ECR и использую EB (среда докеров с несколькими изображениями) для сборки из ECR.   -  person Leo Aslan    schedule 16.09.2020
comment
@Marcin, у него все еще есть эта ошибка   -  person Leo Aslan    schedule 16.09.2020
comment
Итак, вы запускаете скрипт на своем компьютере? Не какой-то контейнер или экземпляр ec2?   -  person Marcin    schedule 16.09.2020
comment
дасссссссссс   -  person Leo Aslan    schedule 16.09.2020
comment
Как насчет возврата к основному. Можно ли запускать из шелл-скрипта простейшие команды, например aws s3 ls? Никакого докера, никакого другого беспорядка. Просто самая основная команда.   -  person Marcin    schedule 16.09.2020
comment
Unable to locate credentials. You can configure credentials by running "aws configure". Вот что я получил   -  person Leo Aslan    schedule 16.09.2020
comment
А вы уверены, что используете того же пользователя, что и в терминале? Не sudo или другой пользователь, чем вы?   -  person Marcin    schedule 16.09.2020
comment
Мой линукс имеет только 1 пользователя   -  person Leo Aslan    schedule 16.09.2020
comment
можете ли вы добавить whoami в сценарий и проверить, действительно ли вы выполняете сценарий под своим собственным пользователем, а не root.   -  person Marcin    schedule 16.09.2020
comment
Он показывает корень...   -  person Leo Aslan    schedule 16.09.2020
comment
Таким образом, вы используете другого пользователя, чем вы сами, когда запускаете команду в терминале. Это объясняет, почему он не работает.   -  person Marcin    schedule 16.09.2020
comment
Ой. Я понял. Спасибо за вашу помощь   -  person Leo Aslan    schedule 16.09.2020
comment
Без проблем. Я дам ответ, если вы не возражаете.   -  person Marcin    schedule 16.09.2020
comment
Конечно!!!!!!!   -  person Leo Aslan    schedule 16.09.2020


Ответы (1)


На основании комментариев.

Причина, по которой скрипт не работает, заключается в том, что он выполняется под пользователем root. Пользователь root не имеет определенного профиля aws, что объясняет, почему сценарий выдает ошибку. Вы можете настроить учетные данные, запустив сообщение aws configure.

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

  1. Не запускайте скрипт под пользователем root. Запустите его как свой собственный пользователь, потому что у вас есть настроенный профиль aws для себя (предпочтительно).
  2. Создайте новый профиль aws для пользователя root.
person Marcin    schedule 16.09.2020