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

标签 docker scale docker-compose volume docker-swarm

背景:我正在使用 docker-compose 将 tomcat 服务放入 docker swarm 集群,但我目前正在努力解决如何处理日志目录,因为我想要扩展服务但保留日志目录的唯一性。

考虑(显然)由 docker-compose 组成,它只是启动 tomcat 并安装一个日志文件系统来捕获日志。

版本:'2' 服务: Tomcat : 图片:“tomcat:最新” 主机名:tomcat-example 命令:/start.sh 卷: - "/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"

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

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

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

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

提前感谢 docker ! R.

最佳答案

您真的不应该登录到文件系统,而是使用专门的日志管理工具,例如 graylog/logstash/splunk/...。在 Tomcat 中使用特定的 appender 配置日志框架,或者登录到 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...]

如果您想在特定位置拥有好看的名称,请使用脚本创建符号链接(symbolic link)。

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

关于docker - 使用 docker-compose 扩展服务时如何在卷路径中指定迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38504328/

相关文章:

django - docker nginx无法与Web容器建立连接

docker - 如何从非root用户运行docker容器?

docker - 为 docker 构建指定 DNS

selenium - 如何修复 docker 容器中的 "org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: crashed"

iphone - Webkit iPhone 应用程序 : How to dynamically change the user zoom (or scale, pic & Zoom) 在视口(viewport)中?

android - 拉伸(stretch)图像以适应

css - 我怎样才能防止我的图像扩大我的页面宽度?

docker-compose - traefik - 将变量放入 docker 标签中

docker - Jekyll-Assets : Missing assets when building site

reactjs - docker 化后无法在浏览器中打开React应用