【问题标题】:Running airflow commands in Docker image error: [Errno 13] Permission denied: '/opt/airflow/logs/scheduler/在 Docker 映像中运行气流命令错误:[Errno 13] Permission denied: '/opt/airflow/logs/scheduler/
【发布时间】:2020-09-03 07:54:39
【问题描述】:

我正在从docker hubapache/airflow:latest 之上创建一个图像,该图像复制到本地dag 和插件。构建本地气流映像后,我运行命令 docker run -it local_airflow:latest list_dags 列出最近复制的 dag,但我得到了输出:

Unable to load the config, contains a configuration error.
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/logging/config.py", line 565, in configure
    handler = self.configure_handler(handlers[name])
  File "/usr/local/lib/python3.6/logging/config.py", line 738, in configure_handler
    result = factory(**kwargs)
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/utils/log/file_processor_handler.py", line 50, in __init__
    os.makedirs(self._get_log_directory())
  File "/usr/local/lib/python3.6/os.py", line 220, in makedirs
    mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/opt/airflow/logs/scheduler/2020-09-03'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/airflow/.local/bin/airflow", line 25, in <module>
    from airflow.configuration import conf
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/__init__.py", line 47, in <module>
    settings.initialize()
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/settings.py", line 402, in initialize
    LOGGING_CLASS_PATH = configure_logging()
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/logging_config.py", line 68, in configure_logging
    raise e
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/logging_config.py", line 63, in configure_logging
    dictConfig(logging_config)
  File "/usr/local/lib/python3.6/logging/config.py", line 802, in dictConfig
    dictConfigClass(config).configure()
  File "/usr/local/lib/python3.6/logging/config.py", line 573, in configure
    '%r: %s' % (name, e))
ValueError: Unable to configure handler 'processor': [Errno 13] Permission denied: '/opt/airflow/logs/scheduler/2020-09-03'

这是建立在基础气流图像之上的 Dockerfile:

FROM apache/airflow:latest

USER airflow

ARG REQUIREMENTS_TXT=""
ENV REQUIREMENTS_TXT=${REQUIREMENTS_TXT}

COPY $REQUIREMENTS_TXT $REQUIREMENTS_TXT

ARG AIRFLOW_CONSTRAINTS_URL=""
ENV AIRFLOW_CONSTRAINTS_URL=${AIRFLOW_CONSTRAINTS_URL}

RUN if [ ! -z "${REQUIREMENTS_TXT}" ]; then pip install --user --upgrade pip && \
    pip install --user -r "${REQUIREMENTS_TXT}" \
    --constraint "${AIRFLOW_CONSTRAINTS_URL}"; fi

ARG DAGS_FOLDER="dags/"
ENV DAGS_FOLDER=${DAGS_FOLDER}

COPY dags/ $AIRFLOW_HOME/dags/

ARG PLUGINS_FOLDER="plugins/"
ENV PLUGINS_FOLDER=${PLUGINS_FOLDER}

COPY plugins/ $AIRFLOW_HOME/plugins/

这里是 docker build 命令

docker build . \
    --tag local_airflow:latest \
    --build-arg DAGS_FOLDER="dags/" \
    --build-arg PLUGINS_FOLDER="plugins/" 

【问题讨论】:

    标签: docker airflow


    【解决方案1】:

    问题在于这些文件的所有者(几乎可以肯定)是 root。因此,您无权更改那里的任何内容。

    我建议将 COPY 命令更改为如下所示:

    COPY --chown=airflow ... ...
    

    这会将文件/文件夹的所有权更改为气流。

    有关更多信息,请查看文档:https://docs.docker.com/engine/reference/builder/#copy

    【讨论】:

    • 感谢您的清晰解释和文档链接
    【解决方案2】:

    如文档中所述: https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html#initializing-environment

    mkdir -p ./dags ./logs ./plugins
    echo -e "AIRFLOW_UID=$(id -u)" > .env
    
    AIRFLOW_UID=50000
    

    否则,文件将作为 root 用户创建。

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 2020-10-23
      • 2018-07-21
      • 2017-07-15
      • 2021-08-22
      • 2020-12-07
      • 2017-02-12
      • 2020-12-12
      • 1970-01-01
      相关资源
      最近更新 更多