Oi, Geovane!
Entendo a frustração quando as coisas não funcionam como esperado. Vamos resolver isso!
Primeiro, parece que você está usando a versão correta do Docker e Docker Compose. O problema que você está enfrentando com o comando "docker compose up" pode estar relacionado à sintaxe ou à estrutura do seu arquivo docker-compose.yml
.
O erro "services.build must be a mapping" geralmente indica que o Docker Compose não está conseguindo interpretar corretamente o caminho para o diretório de build. Vamos verificar algumas coisas:
Estrutura do Arquivo:
Certifique-se de que a indentação e a estrutura do seu arquivo docker-compose.yml
estão corretas. YAML é muito sensível à indentação. Aqui está um exemplo do seu arquivo com a indentação correta:
version: "3.9"
services:
server:
build: .
container_name: allbooks
ports:
- "8080:3000"
Localização do Arquivo:
Certifique-se de que o arquivo docker-compose.yml
está no mesmo diretório onde você está executando o comando docker compose up
.
Diretório de Build:
Verifique se o diretório atual (representado por .
) contém um Dockerfile
. O Docker Compose precisa desse arquivo para construir a imagem.
Permissões:
Verifique se você tem permissões adequadas para acessar o diretório e os arquivos necessários.
Aqui está um exemplo prático de como você pode testar isso:
Crie um diretório chamado allbooks
e dentro dele crie um arquivo Dockerfile
simples, por exemplo:
FROM node:14
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
No mesmo diretório, crie o arquivo docker-compose.yml
com o conteúdo:
version: "3.9"
services:
server:
build: .
container_name: allbooks
ports:
- "8080:3000"
Navegue até o diretório allbooks
e execute o comando docker compose up
.
Se ainda assim o problema persistir, pode ser útil verificar a documentação oficial ou buscar por exemplos específicos de configuração de Docker Compose para projetos Node.js, que podem fornecer mais insights.
Bons estudos!