背景:我正在使用 docker-compose 来将 tomcat 服务放入 docker swarm 集群中,但目前我正在努力解决如何处理日志目录的问题,因为我想扩展服务但保留日志目录的唯一性。
考虑一下(显然)组成的 docker-compose,它只是启动 tomcat 并安装一个日志文件系统来捕获日志。
version: '2'
services:
tomcat:
image: "tomcat:latest"
hostname: tomcat-example
command: /start.sh
volumes:
- "/data/container/tomcat/logs:/opt/tomcat/logs,z"
Versions
- 码头工人1.11
- docker-compose 1.7.1
- API版本1.21
Problem:我希望了解如何将变量插入到“卷”日志路径中,以便日志目录对于扩展服务的每个实例都是唯一的
say,
volumes:
- "/data/container/tomcat/${container_name}/logs:/opt/tomcat/logs,z"
我发现根据项目名称(或我所在的目录),容器名称实际上是已知的,那么我可以使用它吗?
例如,将项目名称设置为“tomcat”并运行docker-compose scale tomcat=2
我会看到以下容器。
-
hostname/tomcat_1
-
hostname/tomcat_2
那么有什么方法可以利用它作为日志量中的变量,欢迎其他建议或方法。我意识到我可以只指定一个相对路径并让container_id处理这个问题,但现在如果我将splunk或logstash附加到日志记录设备,我需要知道哪些确实是日志记录设备而不是基本容器f /s。但理想情况下,我希望在这里使用特定的绝对路径。
提前感谢码头工人!
R。
您确实不应该登录到文件系统,而应使用专门的日志管理工具,例如graylog/logstash/splunk/...。使用特定的附加程序在 Tomcat 中配置日志记录框架,或者记录到 sysout 并在 Docker 中配置日志记录驱动程序以将日志重定向到外部目标。
这就是说,如果您确实想采用文件系统方式,只需使用常规的未命名卷,然后调用docker inspect
在容器上查找文件系统上卷的路径:
[...snip...]
"Mounts": [
{
"Type": "volume",
"Name": "b8c...SomeHash...48d6e",
"Source": "/var/lib/docker/volumes/b8c...SomeHash...48d6e/_data",
"Destination": "/opt/tomcat/logs",
[...snip...]
如果您想在特定位置拥有漂亮的名称,请使用脚本创建符号链接。
然而,我仍然对这个解决方案持怀疑态度,尤其是在多主机群环境中。记录到外部专业服务是您的用例中的最佳选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)