2
respostas

As imagens criadas a partir do dockerfile não funcionam os volumes que crio por comando.

Eu criei a imagem do exemplo do curso, porem o container não é iniciado quando crio o container com a flag -v para usar volume.

docker run -d -v "$(pwd):/var/www" -p 8080:3000 pabloortolani/node

retorno quando executo o comando:

PS C:\wamp64\www\volume-exemplo> docker run -d -v "$(pwd):/var/www" -p 8080:3000 pabloortolani/node
b4d329e377385555ced3915a3ec5280834b5247785fcae335a0ad7f7faf81b8c
PS C:\wamp64\www\volume-exemplo>

quando verifico os container iniciados com o comando "docker ps" e no navegador na porta "http://localhost:8080/", o container realmente não foi iniciado.

PS C:\wamp64\www\volume-exemplo> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
PS C:\wamp64\www\volume-exemplo>

quando executo o comando sem a flag -v o container inicia normalmente.

Sabem me dizer o que estou fazendo de errado?

2 respostas

A flag -d é de "detach", ou seja, o container executa sem prender o terminal. Como não tem nenhuma instrução pra rodar, o container ubuntu inicia e finaliza.

Quando vc executa o comando ""docker ps -a" o container aparece na lista como criado e finalizado?

Tenta rodar o "docker run" com -it pra prender o terminal ou chama o container já criado pelo "docker start".

Olá Pablo, reproduzi o seus comandos, e realmente o container não consegue ser inicializado e consequentimente fica com o status parado.

No meu caso, fiz as seguintes etapas para entender o que ocorreu:

  • executei o comando "docker container logs 926" (onde 926 é o id do container que criei aqui na minha máquina) para ver os possiveis logs de erro
  • analisei os logs que foram exibidos, onde encontrei uma linha "Error: Cannot find module 'express''", e cheguei a conclusão de que como eu estou mapeando volumes (com a tag -v), então os container que forem levantados terá os mesmos arquivos e pastas da maquina fisica, e como na maquina fisica eu havia deletado a pasta node_modules na hora da geração do build do Dockerfile (que pode ser o seu caso também) ocorreu o erro de não encontrar o módulo do 'express'
  • Recriei a pasta node_modules executando o comando 'npm install' na minha maquina fisica, levantei um novo container com o mesmo comando, e deu certo o start e a função de volumes

Espero que possa ter lhe ajudado :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software