docker中/dev/stdout的理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker中/dev/stdout的理解相关的知识,希望对你有一定的参考价值。
参考技术A以nginx.conf为例子
我们通常看到的日志都是输入到一个文件中,类似access.log,error.log。只要产生相关日志日志就会出现对应的文件中。
而我们在docker容器中,nginx.conf文件如下
supervisord.conf文件如下
可以看到日志并不是输出到一个文件内,而是 /dev/stdout 和 /dev/stderr 。它的作用就是日志输出docker日志中,而不输入到具体的文件中。docker日志就是使用以下命令在前台输入的内容
或者是我们docker前台启动后,输出的内容
如docker前台启动一样,日志也会输出到nginx前台启动,通过nginx二进制命令启动
nginx查看标准输出的日志通过前台启动时可以看到,其他服务也是一样,通过前台启动时即可查看到。
还有一个问题,就是起了一个容器后,该容器有nginx和php进程,而俩进程都是使用supervisord来守护进程的。nginx日志都可以在docker里面正常输出,当我有一个需求,需要开启定时执行任务。这时需要在dockerfile文件中新增CMD命令,因为dockerfile中只能执行一条CMD命令, 该命令就是容器的主进程 。所以我门既要保证原来的服务能正常启动,我们还要启动crontab。所以命令如下
如果执行上条命令的话,会报code为0的问题,表示容器退出,也就是后台启动完进程就退出了,所以容器也就没有存在的意义,也就退出了。所以我们加tail命令,tail可阻塞,挂起一个主进程,类似前台启动。
注意:这时意味着和之前相比,主进程发生了变化,也就意味着,此时nginx的相关日志就不会输出在docker前台了。可以想象成原来开启的是nginx服务,现在开启了一个mysql服务,nginx的相关日志信息也理所当然的不会出现在mysql的服务中了。
重要:如果使用CMD后改变主进程,类似nginx日志将不会输出到console,此时我们应该修改nginx的配置文件,让其log输出到文件中
以上是关于docker中/dev/stdout的理解的主要内容,如果未能解决你的问题,请参考以下文章
docker /dev/mapper/centos-root 空间满了,怎么办
docker /dev/mapper/centos-root 空间满了,怎么办
docker /dev/mapper/centos-root 空间满了,怎么办