1
resposta

Gravar / Persistir Log no Host a partir do container

Estou criando um container java, e possuo uma configuração de log com o Log4J onde a gravação do log está apontada para o seguinte caminho: /var/log/api/ (tanto no Host quanto no Container)

Buscando informações na internet a opção que possuo é a utilização de "volume", configurei no Dockerfile e no docker-compose da seguinte maneira:

Dockerfile

FROM openjdk:8
LABEL maintainer="Renato Rodrigues"

WORKDIR /opt/javaapp

COPY api/api.jar /opt/javapp/api.jar

VOLUME ["/var/log/api"]

ENTRYPOINT ["sh", "-c", "java -jar /opt/javapp/api.jar"]

EXPOSE 84
EXPOSE 05
EXPOSE 43

docker-compose

version: '3'
volumes: 
    logs:
services:
    api: 
        container_name: recad_api-container
        image: cap/recadastro_api_img
        build:  
            context: ./
            dockerfile: ./api/Dockerfile
        ports: 
            - '8443:8443'
            - '5005:5005'
            - '8084:8084'
        restart: always
        volumes: 
            - logs:/var/log/api:/var/log/api

Ao executar o comando: docker-compose up --build -d

Ocorre o seguinte erro:

ERROR: for api  Cannot create container for service api: invalid mode: /var/log/api
1 resposta

Olá Bruno, tudo bem? No Dockerfile a instrução VOLUME ["/var/log/api"] indica onde o volume vai ficar dentro do container, já no docker-compose.yml, é onde é feito o bind de pastas, no caso você utilizou um volume nomeado chamado logs correto? E esse volume foi criado dentro arquivo docker-compose.yml como por exemplo:

volumes:
  logs:

Porque precisamos determinar qual o diretório do seu host (sua máquina física) será compartilhado com o container, isso poderia ser da seguinte forma:

- /home/usuario/api:/var/log/api

Você poderia tentar dessa forma e falar pra gente se funcionou!