2016-08-01 5 views
2

현재 docker run 명령을 사용하여 CentOS 기반 컨테이너에서 명령을 실행할 수있는 ENTRYPOINT가있는 이미지를 빌드하는 Dockerfile이 있습니다. 이 명령을 실행하면 Docker 컨테이너가 중지되고 제거됩니다.CMD를 실행 한 후 Docker 컨테이너에서 호스트로 로그 파일 복사

그러나 실행 된 명령은 Docker 컨테이너 내부에 일부 로그 파일을 생성하며 컨테이너가 종료되면 즉시 손실됩니다. 이 파일을 보존하는 가장 좋은 방법은 무엇입니까 (가능하면 호스트 컴퓨터에 저장할 수있는 것이 가장 좋음)?

+0

당신이 읽어야 https://www.loggly.com/docs/docker-syslog/, https://www.loggly.com/blog/top-5-docker-logging-methods-to-fit-your-container-deployment-strategy/ 및 https://gist.github.com/afolarin/a2ac14231d9079920864 – user2915097

+1

로그 파일이 저장된 위치를 호스트에 마운트 할 수 있습니다. – lvthillo

+0

나는 loggly에 대해 조금 읽었고 그것을 사용하는 것을 고려하고있다. 이 @ lorenzvth7 할 수 있으면 아주 간단하지만 도커 컨테이너가 시작될 때까지 로그 파일이 생성되지 않습니다 (컨테이너를 시작하면 내 호스트에 디렉토리를 마운트하면 로그 디렉토리가 비어 있습니다) – kshah

답변

1

이 해결책이 될 수 있습니다 명명 된 고정 표시기 볼륨을 작성 : 나는 당신의 앱 희망 유사한 무언가를 만들어보다

docker volume create --name centos-volume 

그래서 호스트에 대한 자신의 볼륨의 경로가 /var/lib/docker/volumes/centos-volume/_data

. 내 dockerfile (. 당신이 그랬던 것처럼 내가 (고정 표시기 실행과 용기를 시작할 때 사본 내 컨테이너의 로그를 생성하는 스크립트 나는) 스크립트를 시작) : 스크립트의

FROM centos:7 
RUN mkdir /script 
COPY create-log.sh /script/ 
RUN chmod +x /script/create-log.sh 

콘텐츠 (그것은 생성 /var/log/anaconda에서 로그 파일)

#!/bin/bash 
touch /var/log/anaconda/my-log.log 
echo "hello world" >> /var/log/anaconda/my-log.log 

나는 내 컨테이너를 시작합니다

docker run --rm -ti -v centos-volume:/var/log/anaconda/ my-centos ./script/create-log.sh 

그래서이 명령은 내 컨테이너에서 스크립트를 실행하고의 내용을 마운트 내 /var/log/anaconda 내 컨테이너의 폴더가 내 볼륨의 내 호스트에 있습니다.

내가 확인보다 :

cat /var/lib/docker/volumes/centos-volume/_data/my-log.log 
hello world 

컨테이너를 다시 실행 한 후 두 번째 로그가 나타납니다

docker run --rm -ti -v centos-volume:/var/log/anaconda/ my-centos ./script/create-log.sh 

$ sudo su 
[[email protected] centos]# cat /var/lib/docker/volumes/centos-volume/_data/my-log.log 
hello world 
hello world 
관련 문제