我正在尝试在this site中播放时测试保存docker容器的日志文件,它会为你提供一个安装了docker的linux root shell。我使用了here提供的解决方案:
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
中没有保存任何内容。知道如何正确保存所有日志吗?
答案 0 :(得分:-1)
由于您使用的是DockerHub中的官方mongo图像,因此值得指出的是,此官方图像(如许多 - 或所有? - 官方图像)不会将日志输出发送到默认日志如果您下载相同软件的Linux发行版,则可能会出现这些位置。
相反,大多数能够被告知在哪里记录的软件都被强制登录到stdout / stderr,以便docker log plugins和docker log
命令本身正常工作。
对于mongodb案例,你可以看到这个有点复杂的代码here告诉mongodb进程使用映射到" stdout"的/proc
文件系统文件描述符,只要它在容器启动时是可写的。由于一些错误,这比日志输出的其他Dockerfile
自定义更复杂(如果对评论中的链接感兴趣,您可以阅读更多内容。)
我认为尝试进行某种形式的日志整合或收集更合理的方法是阅读docker log drivers并查看是否有任何这些选项适合您。例如,如果您喜欢journald
,则会有一个驱动程序将收集所有容器日志并将其传递给主机上的日记。