Установите драйвер журнала 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