我正在创建NGINX容器。我想将所有日志写入已装入的卷而不是默认卷。这可以通过将access_log和error_log指向已安装卷中的文件夹来更新nginx.conf文件来实现。我希望每个容器都能写入已安装卷中的容器特定文件夹。
例如:
容器图片名称:mycontainerapp
装载量:/logdirectory
然后我想:
/var/log
指向/logdirectory/mycontainerapp/{containerID}/log
这样,我可以让多个容器登录到公共安装卷。
AFAIK,我可以从/ proc / 1 / cpuset获取容器ID 我不确定是否有任何其他方式来获取容器ID
问题是,如何使用DOCKERFILE读取该容器ID并使用它来创建已装入的卷(带文件夹名称)?
此外,如果有更好的方法来实现我想要实现的目标,请告诉我,因为我是码头工的新手。
答案 0 :(得分:0)
Docker包含logging drivers,可从等式中删除标准日志文件。发送到stdout
和stderr
的所有数据都将由Dockers日志记录界面捕获。
有许多send the access log stdout
or /dev/fd/1
and send the error log to stderr
or /dev/fd/2
可以将日志从Docker主机发送到中央日志记录服务(Graylog,Syslog,AWS CloudWatch,ETW,Fluentd,Google Cloud,Splunk)。 json
驱动程序是本地存储在Docker主机上的默认驱动程序。 journald
也将在本地存储和访问。
在nginx配置或任何容器中,meta data can be attached to logs
daemon off;
error_log /dev/fd/2 info;
http {
access_log /dev/fd/1;
...
}
一旦开始将此概念应用于所有容器,就会从容器/应用程序级别删除任何日志管理要求并将其推送到主机。容器{{3}}。移动或更改日志记录机制变得更加容易。迁移到像Swarm这样的集群设置变得不那么麻烦了。这一切都与Docker推动的每个容器的每个进程联系起来。