Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Executar DAG de criar diretorio Permissão Negada

Boa noite! Estou enfrentando um problema com o Airflow.

Atualmente utilizo windows e para replicar o ambiente do curso criei uma distro Ubuntu 22.04 com WSL e instalei o airflow utilizando Docker.

Realizei as instalações e logo em seguida coloquei o airflow para rodar utilizando docker-compose da propria documentação do airflow, porem ao rodar a DAG que cria um diretorio na maquina ele me retornou a a resposta de falha. Analisei os LOGS da execução da DAG e percebi que ao rodar o comando do BashOperator o Sistema Operacional me retornou "Permission Denied" tentei colocar o a permissão geral na pasta alterando o CHMOD da pasta para 777 mas mesmo assim não obtive sucesso. Alguem já passou por esse problema, ou tem alguma orientação para a execução da DAG ter permissão para criar a pasta?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Oii, Lucas! Como vai?

O erro que está retornando indica que o problema está relacionado com as permissões de acesso do Docker aos sistema ao sistema de arquivos no WSL.

Tendo isso como base, peço, por gentileza, que verifique alguns pontos:

  • Garanta que o usuário está executando o Docker no WSL tenha permissões corretas para acessar e modificar o diretório /home/lucasvieira.

  • Quando você usa docker-compose para iniciar o Airflow, você pode mapear volumes do host para o container. Verifique se o volume está sendo mapeado corretamente no arquivo docker-compose.yml. Por exemplo:

    services:
      webserver:
        ...
        volumes:
          - /home/lucasvieira:/home/lucasvieira
        ...
    
  • Se a mudança de permissões com chmod 777 não funcionou, você pode tentar garantir que o dono do diretório é o usuário correto e que as permissões estão realmente aplicadas. Execute os seguintes comandos no WSL:

    sudo chown -R $USER:$USER /home/lucasvieira
    sudo chmod -R 777 /home/lucasvieira
    
  • Antes de executar a DAG, tente criar manualmente um diretório no local especificado dentro do WSL para garantir que as permissões estão corretas:

    mkdir -p /home/lucasvieira/pasta
    

    Obs: Se conseguir criar o diretório manualmente, as permissões estão corretas. Caso contrário, há um problema de permissões mais profundo que precisa ser resolvido.

  • O Docker no WSL pode ter restrições adicionais. Verifique se o Docker está configurado para permitir o acesso completo ao sistema de arquivos do WSL. Pode ser necessário ajustar as configurações do Docker Desktop para WSL.

  • Como último recurso, se o problema persistir, você pode modificar o comando no BashOperator para usar sudo (assumindo que o usuário do Docker tem permissões de sudo sem senha):

    cria_pasta = BashOperator(
        task_id='cria_pasta',
        bash_command='sudo mkdir -p /home/lucasvieira/pasta',
        dag=dag,
    )
    

    Mas fica aqui um alerta, essa prática não é recomendada para produção por razões de segurança.

Sempre consulte os logs adicionais do Docker e do Airflow para mais informações sobre o erro. Pois eles são detalhados e podem oferecer pistas adicionais sobre onde o problema está ocorrendo.

Espero que uma das sugestões te ajude. Qualquer dúvida, conte conosco.

Bons estudos, Lucas!

Boa noite Nathalia! Tentei fazer algumas das ações descritas porem não obtive sucesso. Então tirei o WSL da jogada e instalei o airflow com docker diretamente no windows ainda sem sucesso de criar a pasta. Realizando alguns testes pensei em identificar o usuario fazendo o comando 'mkdir -p ~/teste' o comando foi realizado com sucesso, então fui identificar em qual imagem do docker eu teria uma pasta teste na pasta raiz do usuario e encontrei essa pasta na imagem do airflow-worker-1 como eu esperava e olhado em qual usuario teria a pasta teste foi no usuario 'airflow' e tentando criar a pasta em outro lugar realmente recebi a permissão negada. Acredito que teria que elevar o acesse desse usuario dentro do container para ele conseguir criar o arquivo. Então fiquei com duas duvidas:

1.Como eu posso fazer esse usuario ter permissoes de ADM (detalhe que tentei realizar o sudo su e não consegui acessar a senha do usuario ADM)? Sabe me dizer se existe alguma senha padrão para o usuario adm desse container?

2.Como eu teria acesso aos diretorios do windows dentro desse ambiente 'airflow-worker'

solução!

Bom dia!

A solução que eu implementei foi a descrita no segundo topico, criei um volume no docker - ./shared:/shared criando esse volume quando executei o docker-compose up para recriar os serviços e subir o volume.