Airflow DockerOperator给出文件未找到错误/拒绝权限错误



我有一个本地创建的docker容器(带有python脚本(,可以在本地运行,如下所示:

docker run--rm-v"PWD"/输出:/app_base/output eod_price:latestpython eod_price.py ACN-b 7-f out.csv

此应用程序将输出保存在文件/Users/me/Documents/Python/GitHub/docker-learn/docker007/output/out.csv

$ ls -l
-rw-r--r--@  1 me  staff    647 23 Jul 22:47 Dockerfile
-rw-r--r--   1 me  staff   2628 24 Jul 06:37 Readme.md
-rw-r--r--@  1 me  staff  10222 12 Jul 15:54 airflow-docker-compose.yaml
drwxr-xr-x   3 me  staff     96 23 Jul 22:56 app
drwxr-xr-x@  6 me  staff    192 23 Jul 22:26 dags
drwxr-xr-x@ 10 me  staff    320 23 Jul 13:39 logs
-rw-r--r--   1 me  staff    646  3 Jul 09:59 myapp-docker-compose.yaml
drwxr-xr-x   3 me  staff     96 23 Jul 22:58 output
drwxr-xr-x@  2 me  staff     64 11 Jul 22:41 plugins
-rw-r--r--@  1 me  staff    119 23 Jul 21:26 requirements.txt

在airflow docker compose文件中,我为输入和输出目录添加了额外的卷

volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
- ./plugins:/opt/airflow/plugins
- ./input:/opt/airflow/input
- ./output:/opt/airflow/output

在dags目录中,我正试图在apache airflow 中运行此程序

eod_price = DockerOperator(
task_id='get_eod_price',
image='eod_price',
api_version='auto',
command='python eod_price.py ACN -b 7 -f out.csv',
container_name='eod_price-container',
auto_remove=True,
mounts=[
Mount(source='/opt/airflow/output',
target='/app_base/output',
type='bind'),
],
mount_tmp_dir=False,
docker_url='unix://var/run/docker.sock',
network_mode='bridge'
)

然而,我得到FileNotFoundError: [Errno 2] No such file or directory错误

我在DockerOperator中尝试过的其他东西有:

  • 添加&删除host_tmp_dir
  • 删除mount_tmp_dir

我关注了另一个类似的问题链接,在气流docker compose中,我添加了额外的体积x-airflow common:

- /var/run/docker.sock:/var/run/docker.sock

但是,这将错误更改为PermissionError: [Errno 13] Permission denied

我在Mac OS 上

  • 有什么技巧可以解决这个问题吗
  • 调试气流问题的最简单方法是什么
  • 我不知道的是,这个错误是由于DockerOperator函数中错误安装卷或其他问题造成的。我无法判断气流是否甚至没有找到容器图像(eod_price(,或者在执行图像时出错

编辑:我在链接中遵循了另一个解决方案。该解决方案chmod 777 /var/run/docker.sock也不起作用。我还试着用TCP包装解决方案运行它,然后我得到了一个新的错误,所以我恢复了。

我也有同样的问题。我通过修复了它

  • 增加额外体积x-airflow common
  • docker_url参数替换为docker_ul='tcp://docker-proxy:2375'适用于所有DockerOperators

相关内容

最新更新