Tive um erro ao executar um contêiner. Consegui resolver refazendo o build, mas não entendi o porquê. Gostaria de entender melhor o que aconteceu.
Na parte 3 da aula 3 do Curso de Docker, fiz o build da imagem conforme instruído:
murilo in TrustedRepos/Docker/node-app-example
➜ docker build -t muriloloffi/app-node:1.0 .
[+] Building 23.7s (10/10) FINISHED
(...)
Na reticências acima (...), não há nenhum erro ou warning no output, por isso abreviei.
No entanto, ao instanciar um contêiner desta imagem, o Docker reclama que não consegue encontrar o npm start
nos caminhos definidos em $PATH do ambiente conteinerizado.
murilo in TrustedRepos/Docker/node-app-example
➜ docker run -d -p 3000:3000 muriloloffi/app-node:1.0
62fbd49091c5c3dc5f659906fce396c1aae589b3d8e16d0e00c071d48c617186
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "npm start": executable file not found in $PATH: unknown.
A solução foi simplesmente re-executar o mesmo comando de build, mas não ficou claro o porquê. Alguém saberia explicar?
A fim de melhor contextualizar, segue o conteúdo da pasta e o Dockerfile:
Pasta:
murilo in TrustedRepos/Docker/node-app-example took 22,2s
➜ ls
Dockerfile index.html index.js main.css node_modules package.json
Dockerfile:
# Define a base da imagem
FROM node:18
# Define o diretório padrão, onde os comandos serão executado. Torna-se o "." do contêiner.
WORKDIR /app-node
# Copia o contéudo a ser conteinerizado para dentro do contêiner. Neste caso, o que está sendo conteinerizado é a uma aplicação node, na pasta do projeto atual "." para o diretório padrão do contêiner "."; Caso um diretório padrão do contêiner não tenha sido especificado, pode-se passar o nome do diretório de destino dentro do contêiner como segundo parâmetro do comando COPY. Por exemplo: COPY . /app-node
COPY . .
# Comando a ser executado na criação do contêiner
RUN npm install
# Processo que, enfim, ficará executando no isolamento do contêiner.
ENTRYPOINT npm start%