使用卷保存docker日志文件会导致权限被拒绝

我试图testing保存在这个站点中的Docker容器的日志文件,该文件为您提供了一个安装了docker的linux root shell。 我在这里使用的解决scheme:

docker run -ti -v /dev/log:/root/data --name zizimongodb mongo 

这是我在控制台中得到的:

 docker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "process_linux.go:339: container init caused \"rootfs_linux.go:57: mounting \\\"/dev/log\\\" to rootfs \\\"/graph/overlay2/7f1eb83902e3688c0a1204c2fe8dfd8fbf43e1093bc578e4c41028e8b03e4b38/merged\\\" at \\\"/graph/overlay2/7f1eb83902e3688c0a1204c2fe8dfd8fbf43e1093bc578e4c41028e8b03e4b38/merged/root/data\\\" caused \\\"permission denied\\\"\"". 

但是容器已经开始了:

 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8adaa75ba6f7 mongo "docker-entrypoint..." 2 minutes ago Created zizimongodb 

docker logs -f zizimongodb什么也不返回。 当我停止容器时,没有任何东西被保存在/root/data 。 任何想法如何我可以正确保存所有日志?

既然你使用的是DockerHub官方的mongo镜像,值得指出的是这个官方镜像(如官方镜像的许多或全部)不会将日志输出发送到你可能期望的默认日志位置你下载一个相同软件的Linux发行版本。

相反,大多数能够被告知在哪里login的软件都被迫login到stdout / stderr,以便docker日志插件和docker log命令本身正常工作。

对于mongodb的情况,你可以在这里看到这个有点复杂的代码,它告诉mongodb进程使用映射到“stdout”的/proc文件系统文件描述符,只要容器启动时它是可写的。 由于一些错误,这更复杂,其他Dockerfile定制的日志输出(如果对注释中的链接感兴趣,可以阅读更多内容)。

我认为更合理的方式来尝试和做某种forms的日志整理或收集是阅读有关docker日志驱动程序 ,看看是否有任何这些选项适合你。 例如,如果您喜欢journald ,则会有一个驱动程序将所有容器日志logging到主机上,并将它们传递给主机上的日志logging。

Interesting Posts