当气流尝试写入日志时,错误 13 权限被拒绝

phe*_*der 7 permissions logging airflow airflow-scheduler

我们在使用 Airflow 时遇到权限错误,收到以下错误:

PermissionError: [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler/2019-12-18/../../../../home
Run Code Online (Sandbox Code Playgroud)

我们已经尝试在容器内的 /usr/local/airflow/logs/schedule 目录上使用 chmod 777 -R ,但这似乎没有成功。

我们在 entrypoint.sh 脚本中有这一段:

export AIRFLOW__CORE__BASE_LOGS_FOLDER="/usr/local/airflow/logs

有没有其他人遇到过这个气流日志权限问题?似乎无法在网上找到太多关于此的信息。

小智 12

仅供有同样问题的人...

令人惊讶的是,我不得不查看Airflow 文档......根据它:

Linux上,容器中挂载的卷使用本机 Linux 文件系统用户/组权限,因此您必须确保容器和主机具有匹配的文件权限。

mkdir ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)\nAIRFLOW_GID=0" > .env
Run Code Online (Sandbox Code Playgroud)

一旦您具有匹配的文件权限:

docker-compose up airflow-init
Run Code Online (Sandbox Code Playgroud)
docker-compose up
Run Code Online (Sandbox Code Playgroud)

  • 谢谢这对我有用。如果不设置 AIFLOW_UID,所有文件都将以 root 用户身份创建,这会导致权限问题。 (2认同)

Sai*_*ish 11

绑定安装的文件夹权限也可能导致此错误。

例如:

docker-compose.yml(伪代码)

   service_name:
     ...
     volumes:
      - /home/user/airflow_logs:/opt/airflow/logs
Run Code Online (Sandbox Code Playgroud)

授予本地文件夹权限,以便气流容器可以写入日志、根据需要创建目录等,

 sudo chmod u=rwx,g=rwx,o=rwx /home/user/airflow_logs
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了同样的问题,我已经使用命令解决了它: sudo chmod -R 777 /home/user/airflow_logs 另外,值得一提的是,这可以应用于尝试从容器导出的任何文件夹。 (6认同)

Gal*_*ses 9

我解决了这个问题:就我而言,问题是卷安装了文件夹,logs并且dags没有写入权限。我添加了它

chmod -R 777 dags/
chmod -R 777 logs/
Run Code Online (Sandbox Code Playgroud)

并在 docker-composer 文件中将它们安装为

    volumes:
      - ./dags:/opt/bitnami/airflow/dags
      - ./logs:/opt/bitnami/airflow/logs
Run Code Online (Sandbox Code Playgroud)


Dom*_*vic 5

我有同样的错误。

PermissionError: [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler'
Run Code Online (Sandbox Code Playgroud)

我收到该错误的原因是因为我在运行 Airflow docker 容器之前没有创建最初的 3 个文件夹(dags、logs、plugins)。所以docker似乎已经自动创建了,但是权限是错误的。

修复步骤:

  1. 停止当前容器
docker-compose down --volumes --remove-orphans
Run Code Online (Sandbox Code Playgroud)
  1. 删除文件夹 dags、日志、插件
  2. 以防万一 销毁已经创建的镜像和卷(在 Docker Desktop 中)
  3. 从命令行再次创建文件夹
mkdir logs dags plugins
Run Code Online (Sandbox Code Playgroud)
  1. 再次运行气流泊坞窗
docker-compose up airflow-init
docker-compose up
Run Code Online (Sandbox Code Playgroud)


Muh*_*far 2

我使用 Apache Airflow 1.10.7 也遇到同样的问题。

Traceback (most recent call last):
  File "/usr/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/usr/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/radifar/.virtualenvs/airflow/lib/python3.7/site-packages/airflow/jobs/scheduler_job.py", line 135, in _run_file_processor
    set_context(log, file_path)
  File "/home/radifar/.virtualenvs/airflow/lib/python3.7/site-packages/airflow/utils/log/logging_mixin.py", line 198, in set_context
    handler.set_context(value)
  File "/home/radifar/.virtualenvs/airflow/lib/python3.7/site-packages/airflow/utils/log/file_processor_handler.py", line 65, in set_context
    local_loc = self._init_file(filename)
  File "/home/radifar/.virtualenvs/airflow/lib/python3.7/site-packages/airflow/utils/log/file_processor_handler.py", line 148, in _init_file
    os.makedirs(directory)
  File "/home/radifar/.virtualenvs/airflow/lib/python3.7/os.py", line 211, in makedirs
    makedirs(head, exist_ok=exist_ok)
  File "/home/radifar/.virtualenvs/airflow/lib/python3.7/os.py", line 211, in makedirs
    makedirs(head, exist_ok=exist_ok)
  File "/home/radifar/.virtualenvs/airflow/lib/python3.7/os.py", line 211, in makedirs
    makedirs(head, exist_ok=exist_ok)
  [Previous line repeated 5 more times]
  File "/home/radifar/.virtualenvs/airflow/lib/python3.7/os.py", line 221, in makedirs
    mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/media/radifar/radifar-dsl/Workflow/Airflow/airflow-home/logs/scheduler/2020-01-04/../../../../../../../home'
Run Code Online (Sandbox Code Playgroud)

检查 file_processor_handler.py 的工作原理后,我发现该错误是由示例 dag 和我们的 dag 文件夹设置的不同目录位置引起的。在我的例子中,文件夹 2020-01-04 上方的第 7 个文件夹是 /media/radifar。在您的情况下,文件夹 2019-12-18 上方的 4 个文件夹是 /usr/local。这就是引发 PermissionError 的原因。

我能够通过清理 AIRFLOW_HOME 文件夹然后运行来解决此问题airflow version并将 airflow.cfg 中的 load_example 设置为 False。然后跑airflow initdb。之后我可以毫无错误地使用气流。

  • 对我来说 load_examples = False 足以解决问题。 (3认同)