1
resposta

wait-for não recebe permissão de execução

Pessoal, tudo joia?

Estou passando por uma dificuldade e gostaria da ajuda de vocês, segui exatamenta os passos do curso mas quando executo o sudo docker-compose up dev , o container unleashed retorna "Exited(1)". Ao checar os logs, é específicado o seguinte erro:

/unleash/wait-for:3
# The MIT License (MIT)
^
SyntaxError: Invalid or unexpected token
    at Object.compileFunction (node:vm:360:18)
    at wrapSafe (node:internal/modules/cjs/loader:1084:15)
    at Module._compile (node:internal/modules/cjs/loader:1119:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
    at Module.load (node:internal/modules/cjs/loader:1033:32)
    at Function.Module._load (node:internal/modules/cjs/loader:868:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:22:47

Aparentemente o arquivo wait-for não tem permissão para execução, daí reforcei as permissões no meu repositório com chmod +x ./unleash-docker/wait-for e mesmo assim não funcionou.

Checando os arquivos no docker desktop, realmente o arquivo wait-for é copiado para dentro do container sem permissão:

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

Tentei enviar um comando de permissão via Docker RUN mas mesmo assim não funcionou. Alguém teria alguma idéia do que pode ser?

1 resposta

Olá Matheus, tudo bem?

Pelo que você descreveu, parece que o problema está relacionado com as permissões do arquivo wait-for quando ele é copiado para dentro do container. Mesmo que você tenha alterado as permissões no seu repositório local, essas permissões podem não estar sendo preservadas no processo de cópia para o container.

Uma possível solução que você pode tentar é especificar no seu Dockerfile um comando para alterar as permissões do arquivo wait-for depois que ele for copiado para dentro do container. Você pode fazer isso adicionando a seguinte linha no Dockerfile:

RUN chmod +x /caminho/para/o/wait-for

Certifique-se de substituir /caminho/para/o/wait-for pelo caminho real onde o arquivo wait-for está localizado dentro do seu container.

Outra coisa que você pode verificar é se o arquivo wait-for está sendo copiado corretamente e se o conteúdo dele é um script shell válido. O erro de SyntaxError: Invalid or unexpected token sugere que o Node.js está tentando executar o arquivo como se fosse um script JavaScript, o que não deveria acontecer se o wait-for for um script shell. Verifique se o primeiro cabeçalho do arquivo wait-for está correto, por exemplo, deve começar com #!/bin/sh ou #!/bin/bash se for um script shell.

Espero que essas sugestões ajudem a resolver o problema. Bons estudos!