1
resposta

Volume com Dockerfile

Eu tenho a necessidade de externalizar os logs da minha aplicação diretamente pelo arquivo Dockerfile sem a necessidade de usar linha de comando. Isso é possível?

Tenho uma aplicação Java que gera uma pasta log e quero colocar em /var/log/apps/product-order-api/

Segue meu Dockerfile:

# Base Image
FROM openjdk:8-jdk-alpine

# Volumes (Host/Container)
VOLUME /var/log/apps/product-order-api /log

# Copy jar file to root folder
COPY ${JAR_FILE} app.jar

# Application entry point
ENTRYPOINT ["java","-jar","/app.jar"]

Posteriormente, executo a seguinte instrução:

docker build --no-cache -t product-order-api .
docker run -d --name product-order-api product-order-api:latest

Como faço para criar este volume no Dockerfile sem a necessidade de linha de comando?

Ao usar Kubernetes, preciso de alguma configuração especial no Kubernetes ou posso deixar apenas no Dockerfile?

1 resposta

Olá Leonardo, tudo bem? Segundo a própria documentação do Docker:

"O diretório do host é declarado no tempo de execução do contêiner: O diretório do host (o ponto de montagem) é, por natureza, dependente do host. Isso é para preservar a portabilidade da imagem, pois não é possível garantir que um determinado diretório de host esteja disponível em todos os hosts. Por esse motivo, você não pode montar um diretório de host no Dockerfile. A instrução VOLUME não suporta a especificação de um host-dir parâmetro. Você deve especificar o ponto de montagem ao criar ou executar o contêiner." https://docs.docker.com/engine/reference/builder/

Então usando o Dockerfile não é possível, pelo fato que o Docker não permite a criação de volumes diretamente pelo Dockerfile por questões de portabilidade, note que se você criar uma imagem que sempre tenha um volume na pasta "/log" do container mapeado para a pasta "/var/log/apps/product-order-api" do host, pode ser inviável executar esse container em outros hosts que não tenha essa pasta "/var/log/apps/product-order-api" criada.

Espero ter esclarecido sua dúvida!