使用docker-compose扩展服务时如何在卷路径中指定迭代器?

时间:2016-07-21 12:28:38

标签: docker scale docker-compose volume docker-swarm

背景:我使用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"

版本

  • docker 1.11
  • docker-compose 1.7.1
  • API版本1.21

问题:我希望了解如何将变量插入到'卷'日志路径,以便日志目录对于缩放服务的每个实例都是唯一的

说,

volumes:
    - "/data/container/tomcat/${container_name}/logs:/opt/tomcat/logs,z"

我看到根据项目名称(或目录I' m),容器名称实际上是已知的,我可以使用它吗?

例如,将项目名称设置为' tomcat'然后运行docker-compose scale tomcat=2我会看到以下容器。

  • 主机名 / tomcat_1
  • 主机名 / tomcat_2

所以我有什么方法可以将它作为日志记录卷中的变量,欢迎其他建议或方法。我意识到我可以指定一个相对路径并让container_id处理这个问题,但现在如果我将splunk或logstash附加到日志设备上,我需要知道哪些确实是日志设备,而不是基数容器f / s。然而,理想情况下,我在这里使用特定的绝对路径。

先谢谢码头工人! R上。

1 个答案:

答案 0 :(得分:1)

您实际上不应登录到文件系统,而应使用专用日志管理工具,例如graylog / logstash / splunk /...。可以使用特定的附加程序在Tomcat中配置日志记录框架,或者登录sysout并在Docker中配置日志记录驱动程序以将日志重定向到外部目标。

这就是说,如果您真的想使用文件系统,只需使用常规的未命名卷,然后在容器上调用AppBar即可在文件系统上找到该卷的路径:

SomeWidget

如果要在特定位置使用漂亮的名称,请使用脚本创建符号链接。

但是,我仍然对此解决方案充满怀疑,尤其是在多主机群环境中。登录用例的外部方法是使用外部服务。