我有一個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

看起來很好,所以我不明白為什么它會回傳錯誤。我還嘗試在以下位置設定 ENV 變數./airflow.env:
AWS_ACCESS_KEY_ID=XXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXX
我實作它的唯一方法是使用ADDdockerfile 中的 。
uj5u.com熱心網友回復:
一些地方被指定默認組態檔使用。
這可能是因為:
- 您指定
--profile default為命令列引數 - 您有一個
AWS_PROFILE值為 的環境變數default - 你的
~/.aws/credentials包含[default] - 您的
~/.aws/config檔案包含[default]
上面按照優先級排序,告訴 AWS 使用default組態檔。
仔細檢查默認組態檔未在上述任何內容中被參考(很可能是您的配置或憑據檔案)。
uj5u.com熱心網友回復:
一個可能的原因是,正如在 Docker 檔案中描述的ADD那樣:
所有新檔案和目錄都使用 0 的 UID 和 GID 創建,除非可選
--chown標志指定給定的用戶名、組名或 UID/GID 組合以請求添加內容的特定所有權。
而當您將主機目錄配置為卷時,將保留主機的檔案權限。也許 AWS 開發工具包在通過匹配 UID/GID 查找一組有效憑證時會考慮到這一事實。
另一個可能的原因可能是 AWS 開發工具包在安裝軟體時執行某種初始化。您可以通過pip在 Dockerfile 中運行 before running 來驗證這一點:
ADD ./aws/credentials /home/airflow/.aws/credentials
并查看該軟體是否仍然可以找到合適的憑據集。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318559.html
上一篇:型別腳本通用類約束
