运行CMD后,将日志文件从Docker容器复制到主机

时间:2016-08-01 13:16:39

标签: docker dockerfile

目前我有一个Dockerfile,它将使用ENTRYPOINT构建一个图像,允许我使用docker run命令在基于CentOS的容器中运行命令。运行此命令后,停止并删除Docker容器。

但是,运行的命令将在Docker容器内生成一些日志文件,一旦容器退出,这些文件将立即丢失。保留这些文件的最佳做法是什么(最好能将它们存储在我的主机上)?

1 个答案:

答案 0 :(得分:1)

这可能是一个解决方案: 创建一个命名的docker卷:

docker volume create --name centos-volume

因此,您在主机上的音量的路径为/var/lib/docker/volumes/centos-volume/_data

我创建了一些可以与你的应用程序相媲美的东西。 我的dockerfile(复制一个脚本,它将在我的容器中创建一个日志。当我使用docker run启动容器时启动脚本(就像你一样)):

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
[root@localhost centos]# cat /var/lib/docker/volumes/centos-volume/_data/my-log.log
hello world
hello world