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

Sno*_*owy 10 volume scale docker docker-compose 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"

版本

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

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

说,

volumes:
    - "/data/container/tomcat/${container_name}/logs:/opt/tomcat/logs,z"
Run Code Online (Sandbox Code Playgroud)

我看到基于项目名称(或我所在的目录),容器名称实际上是已知的,所以我可以使用它吗?

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

  • hostname/tomcat_1
  • hostname/tomcat_2

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

在此先感谢码头工人!R.

lbn*_*dev 1

您确实不应该登录到文件系统,而应使用专门的日志管理工具,例如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...]
Run Code Online (Sandbox Code Playgroud)

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

然而,我仍然对这个解决方案持怀疑态度,尤其是在多主机群环境中。记录到外部专业服务是您的用例中的最佳选择。