【问题标题】:Copy log files from Docker container to host after CMD is run运行 CMD 后将日志文件从 Docker 容器复制到主机
【发布时间】:2016-12-06 14:23:14
【问题描述】:

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

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

【问题讨论】:

  • 您可以将存储日志文件的地方挂载到您的主机。
  • 我已经阅读了一些关于 loggly 的内容,并且正在考虑使用它。如果我能做到这一点,那将非常简单@lorenzvth7,但是直到 docker 容器启动之后才会生成日志文件(如果我在启动容器时将目录挂载到我的主机,我相信我的日志目录将是空的)
  • @kshah 我真的不知道。它很容易设置,所以我建议尝试一下。例如。当您启动一个空挂载的容器并执行 docker exec 进入容器并在正确的文件夹中创建一个 test.txt + 退出并删除您的容器时。我认为 test.txt 将位于您主机上的文件夹中。
  • @lorenzvth7 我已经尝试过了,但它似乎不起作用——我用我的 ENTRYPOINT 命令填充的日志目录是空的。不过,我会继续研究这个

标签: docker dockerfile


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多