Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行CMD后,将日志文件从Docker容器复制到主机_Docker_Dockerfile - Fatal编程技术网

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

运行CMD后,将日志文件从Docker容器复制到主机,docker,dockerfile,Docker,Dockerfile,目前,我有一个docker文件,它将构建一个带有入口点的映像,该入口点允许我使用docker run命令在基于CentOS的容器中运行命令。运行此命令后,Docker容器将停止并移除 但是,运行的命令将在Docker容器内生成一些日志文件,一旦容器退出,这些文件将立即丢失。保存这些文件的最佳做法是什么(最好是将它们存储在我的主机上) 这可能是一种解决方案: 创建命名的docker卷: docker volume create --name centos-volume 因此,主机上他的卷的路径是

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

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

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

docker volume create --name centos-volume
因此,主机上他的卷的路径是
/var/lib/docker/volumes/centos volume/\u data

比我创造的东西,希望能与你的应用程序相媲美。 我的dockerfile(复制一个脚本,该脚本将在我的容器中创建日志。我在使用docker run启动容器时启动该脚本(就像您所做的那样)):

脚本内容:(它在
/var/log/anaconda
中创建一个日志文件)

我以以下内容开始我的容器:

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

你应该阅读,你可以挂载你的日志文件存储到你的主机的地方。我已经读了一些关于loggly,我正在考虑使用它。如果我可以@lorenzvth7这样做,那将非常简单,但是日志文件直到docker容器启动后才生成(如果我在启动容器时将目录装载到主机,我相信我的日志目录将是空的)@kshah我真的不知道。它很容易安装,所以我建议尝试一下。例如,当您启动空装载的容器时,执行docker exec进入容器内部并在正确的文件夹中创建test.txt,然后退出并删除容器。我想test.txt会出现在您主机上的文件夹中。@lorenzvth7我已经尝试过了,但它似乎不起作用——我用ENTRYPOINT命令填充的logs目录是空的。不过,我会继续研究这个问题
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