Установите драйвер журнала awslogs на контейнер докеров

Я хочу передать журналы контейнера в AWS Cloud Watch.

Я не могу установить учетные данные AWS в Docker Desktop для Mac.

Docker Version : Version 19.3.5 
Mac OS Version : 10.14.6

Я создал ~/.aws/credentials файлы с учетными данными AWS.

aws_access_key_id : XXXXXXX,
aws_secret_access_key" : XXXXXXXX

Я пытался запустить Докер следующими способами:

docker run --name flask -v ${HOME}/.aws/:/root/.aws/:ro -d --log-driver=awslogs --log-opt awslogs-region=XXXX --log-opt awslogs-group=XXXX --log-opt awslogs-create-group=true flask-image

Пользователь IAM, настроивший политику:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

Но появилась следующая ошибка:

docker: Error response from daemon: failed to initialize logging driver: failed to create Cloudwatch log stream: NoCredentialProviders: no valid providers in chain. Deprecated.
    For verbose messaging see aws.Config.CredentialsChainVerboseErrors.

Я также добавил в docker.json файл.

И в файле Docker Daemon поместите параметры ведения журнала AWS.

{
"log-driver" : "awslogs",
"log-opts" : {
"awslogs-region" : "xxxx",
"awslogs-group" : "xxxxx",
"awslogs-stream" : "xxxxx"
}
}

В результате расследования я обнаружил, что мне нужно установить учетные данные AWS внутри демона Docker, а на моем хосте Docker их недостаточно. Как видите, я пытался сделать это с громкостью, но безуспешно.

Я запускаю Docker на своем Mac, есть ли у кого-нибудь идеи, как решить эту проблему?

3 ответа

У меня такая же проблема.

Как вы правильно предположили, недостаточно предоставить клиенту учетные данные aws. Согласно документации докера:

Вы должны предоставить учетные данные AWS демону Docker.

Теперь при запуске докера на компьютере Mac есть 3 разных сценария:

  • Среда MacOS (разумеется, учетные данные отсюда не экспортируются)
  • Среда виртуальной машины (Oracle VirtualBox с boot2docker)
  • Среда контейнера (здесь пробовали смонтировать.aws/credentials, но не сработали)

Я попробую установить учетные данные в среде виртуальной машины, и посмотрю, поможет ли это.

Если я не ошибаюсь, демон docker работает в среде виртуальной машины, поэтому установка кредитов AWS потенциально может исправить это.

ОБНОВИТЬ:

Рабочее временное исправление со сторонней библиотекой: https://github.com/nearform/docker-cloudwatch/blob/master/index.js

Вы можете попробовать добавить переменную среды в файл docker.service, указывающую на ваш файл учетных данных.

вызвать команду, чтобы найти файл docker.service:

# systemctl status docker.service
 docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)

редактировать /lib/systemd/system/docker.service файл.

В [Service] раздел добавить:

[Service]
Environment=AWS_SHARED_CREDENTIALS_FILE=<path_to_aws_credentials_file>

Похоже, вам не хватает опции -t в вашем docker runкоманда. Посмотри на эти журналы отправки в cloudwatch