保存码头日志文件与卷产生权限被拒绝

问题描述:

我想测试保存码头容器的日志文件在this site播放,它为您提供了一个安装了docker的Linux根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

你为什么使用'/ dev/log'?尝试使用'/ var/log/mongodb:/ root/data' –

+0

@TarunLalwani,首先我有很多组件需要从他们的容器中获取日志;我想保存码头日志以访问所有这些日志。其次,我尝试了你的建议,停下来然后取出容器后没有任何东西被保存。 –

+0

那是因为'mongo'不会在'/ root/data'上共享日志。如果你检查mongodb容器,日志将被发送到'/ var/log/mongodb/mongod.log'。那么你为什么期望它工作? –

由于您使用的是DockerHub官方提供的mongo镜像,值得指出的是官方镜像(如官方镜像的许多或全部)不会将日志输出发送到默认日志如果您下载相同软件的Linux发行版版本,则可能会出现这种情况。

相反,大多数能够被告知在何处登录的软件都被强制登录到stdout/stderr,以便docker日志插件和命令本身正常工作。

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

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