首页 > 解决方案 > 将容器安装到我的部署中时,如何避免“权限被拒绝”错误?

问题描述

背景

我目前正在使用 Helm(使用图表)部署Apache Airflow 。我正在使用git-sync sidecar挂载 SQL 和 Python 文件,Airflow 需要访问这些文件才能执行脚本/文件。

什么似乎不起作用

一旦我完成了容器的部署,我的 Airflow 用户似乎无法使用文件(已由 git sidecar 挂载),并退出并出现错误(此错误发生在所有已挂载的文件上) ):

[Errno 13] Permission denied: 'target'

我试过的

我用于部署的 docker 容器如下所示:

FROM apache/airflow:1.10.14-python3.8

USER root

# apt deps
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
           nano \
           gcc \
           python3-dev \
    && apt-get autoremove -yqq --purge \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Use airflow user for pip installs and other things.
USER airflow

# Additional requirements for Airflow
COPY requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt

# Creating folder for logs
RUN mkdir -p /opt/airflow/dbt_logs
RUN pip install dbt==0.18.1 

EXPOSE 8081

在调度程序容器中运行ls -ld */(in /opt/airflow)我得到:

airflow@airflow-scheduler-58c7cb87b8-8nk6f:/opt/airflow$ ls -ld */
drwxrwsrwx 5    1000    1000 41 Dec 26 16:02 dags/
drwxr-xr-x 2 airflow airflow  6 Dec 26 14:10 dbt_logs/
drwxrwxr-x 1 airflow root    52 Dec 26 16:02 logs/

并在Web 服务器容器中运行ls -ld */(in /opt/airflow)我得到:

airflow@airflow-web-7f8df9457-7n2dp:/opt/airflow$ ls -ld */
drwxrwsrwx 5 root    nogroup 41 Dec 26 14:20 dags/
drwxr-xr-x 1 airflow airflow 21 Dec 26 14:41 dbt_logs/
drwxrwxr-x 1 airflow root    23 Dec 26 14:20 logs/

这是 dbt 文件夹的结构在我的 dags 目录中的样子:

airflow@airflow-scheduler-6cdc985b9b-ssmhx:/opt/airflow/dags/dbt/dw$ ls -l
total 16
-rw-r--r-- 1 root 1000 3061 Dec 27 09:00 README.md
drwxr-sr-x 2 root 1000   22 Dec 27 09:00 analysis
drwxr-sr-x 2 root 1000   22 Dec 27 09:00 data
-rw-r--r-- 1 root 1000 1852 Dec 27 09:00 dbt_project.yml
drwxr-sr-x 2 root 1000  214 Dec 27 09:00 macros
drwxr-sr-x 3 root 1000   21 Dec 27 09:00 models
-rw-r--r-- 1 root 1000  141 Dec 27 09:00 packages.yml
-rw-r--r-- 1 root 1000  842 Dec 27 09:00 profiles.yml
drwxr-sr-x 2 root 1000   22 Dec 27 09:00 snapshots
drwxr-sr-x 2 root 1000   22 Dec 27 09:00 tests

值得一提的是,我似乎无法使用气流用户在 dbt 目录中创建文件(权限被拒绝)

在我看来,一旦安装了卷,它的所有者就会成为 root 用户。如何为 Airflow 用户提供访问已挂载的 git 存储库的能力?

如果需要,很乐意提供更多详细信息

标签: dockerkubernetesdbt

解决方案


推荐阅读