You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非AWS服务器上Docker awslogs驱动无法获取凭证问题排查

问题原因

docker的awslogs日志驱动由宿主机的Docker daemon进程负责调用,而非容器内部应用。你在容器环境变量里配置的AWS密钥、挂载的~/.aws目录,仅对容器内进程生效,无法被Docker daemon读取。因此Docker daemon会默认尝试从EC2实例元数据服务(IMDS)获取凭据,但非AWS服务器/本地环境不存在该服务,最终导致超时报错。

解决方案
  • 给宿主机Docker daemon配置AWS凭据

    • 方式1:通过宿主机AWS配置文件设置(推荐)
      在宿主机的~/.aws/credentials文件中写入:

      [default]
      aws_access_key_id=你的密钥ID
      aws_secret_access_key=你的密钥
      

      同时在~/.aws/config中指定区域:

      [default]
      region=eu-north-1
      

      如果Docker daemon以root用户运行,需将上述文件放在/root/.aws/目录下。配置完成后重启Docker服务:Linux环境执行systemctl restart docker,本地Docker Desktop直接重启应用。

    • 方式2:通过环境变量配置Docker daemon
      以systemd管理的Docker为例,创建/etc/systemd/system/docker.service.d/aws.conf文件,内容如下:

      [Service]
      Environment="AWS_ACCESS_KEY_ID=你的密钥ID"
      Environment="AWS_SECRET_ACCESS_KEY=你的密钥"
      Environment="AWS_DEFAULT_REGION=eu-north-1"
      

      执行重载配置和重启命令:

      systemctl daemon-reload
      systemctl restart docker
      
  • (临时测试用)在docker-compose中直接指定凭据(不推荐生产环境)
    修改docker-compose.yaml的logging选项,添加凭据参数:

    logging:
      driver: awslogs
      options:
        awslogs-group: "test_group"
        awslogs-region: "eu-north-1"
        awslogs-stream: "test_stream"
        awslogs-access-key: "你的密钥ID"
        awslogs-secret-key: "你的密钥"
    

    注意:该方式会将密钥明文暴露在配置文件中,存在安全风险,仅用于临时验证。

  • 验证权限
    确保你的AWS账号拥有CloudWatch Logs的必要权限:logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents,避免因权限不足导致其他报错。

内容的提问来源于stack exchange,提问作者Alberto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:36:17