繁体   English   中英

为什么我收到错误源配置文件“默认”必须具有使用 Boto3 的凭据 Docker?

[英]Why am I getting the error The source profile "default" must have credentials using Boto3 in Docker?

我有一个dockerfile

FROM apache/airflow:2.1.2-python3.8

ENV PYTHONPATH "${PYTHONPATH}:/"

ADD ./aws/credentials /home/airflow/.aws/credentials
ADD ./aws/config /home/airflow/.aws/config

RUN pip install -r requirements.pip

还有一个docker-compose.yml

version: '3'
services:
  webserver:
    image: airflow2
    command: webserver
    ports:
      - 8080:8080
    healthcheck:
      test: [ "CMD", "curl", "--fail", "http://localhost:8080/health" ]
      interval: 10s
      timeout: 10s
      retries: 5
    restart: always
    build:
      context: .
      dockerfile: Dockerfile
    env_file:
      - ./airflow.env
    container_name: webserver
    volumes:
      - ./database_utils:/database_utils
  scheduler:
    image: sch-airflow2
    command: scheduler
    healthcheck:
      test: [ "CMD-SHELL", 'airflow jobs check --job-type SchedulerJob --hostname "$${HOSTNAME}"' ]
      interval: 10s
      timeout: 10s
      retries: 5
    restart: always
    container_name: scheduler
    build:
      context: .
      dockerfile: Dockerfile
    env_file:
      - ./airflow.env
    volumes:
      volumes:
      - ./database_utils:/database_utils
    depends_on:
      - webserver

当运行使用 boto3 连接到 s3 的脚本时,它工作正常。 这里的问题是我将凭据添加到图像中,这是一种不好的做法。 然后我从dockerfile中删除这一行:

ADD ./aws/credentials /home/airflow/.aws/credentials

我将其添加到docker-compose卷部分:

- ./aws:/home/airflow/.aws

如果我现在运行脚本,它会失败:

botocore.exceptions.InvalidConfigError: The source profile "default" must have credentials.

我了解错误并检查了 docker 容器中是否提供了凭据:

aws configure list

在此处输入图像描述

看起来不错,所以我不明白为什么会返回错误。 我还尝试在./airflow.env中设置 ENV 变量:

AWS_ACCESS_KEY_ID=XXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXX

我实现它的唯一方法是使用 dockerfile 中的ADD

某处正在指定要使用的默认配置文件。

这可能是因为:

  • 您将--profile default指定为命令行参数
  • 您有一个AWS_PROFILE环境变量,其值为default
  • 您的~/.aws/credentials包含[default]
  • 您的~/.aws/config文件包含[default]

以上按优先级排序,告诉 AWS 使用default配置文件。

仔细检查默认配置文件未在上述任何内容中被引用(很可能是您的配置或凭据文件)。

一个可能的原因是,正如在 Docker 文档中描述ADD时所解释的:

所有新文件和目录都使用 0 的 UID 和 GID 创建,除非可选的--chown标志指定给定的用户名、组名或 UID/GID 组合来请求添加内容的特定所有权。

而当您将主机目录配置为卷时,将保留主机的文件权限。 也许 AWS 开发工具包在通过匹配 UID/GID 查找一组有效凭证时会考虑到这一事实。

另一个可能的原因可能是 AWS 开发工具包在安装软件时执行某种初始化。 您可以通过在 Dockerfile 中运行之前运行pip来验证这一点:

ADD ./aws/credentials /home/airflow/.aws/credentials

并查看该软件是否仍然可以找到合适的凭据集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM