使用docker compose扩展服务时,如何在卷路径中指定迭代器?
背景:我正在使用docker compose将tomcat服务放入docker swarm集群,但我目前正在努力解决如何接近日志目录的问题,因为我想扩大服务规模,同时保留日志目录的唯一性 考虑一下(显然)由docker compose组成的docker compose,它只是启动tomcat并挂载一个日志文件系统来捕获日志使用docker compose扩展服务时,如何在卷路径中指定迭代器?,docker,scale,docker-compose,volume,docker-swarm,Docker,Scale,Docker Compose,Volume,Docker Swarm,背景:我正在使用docker compose将tomcat服务放入docker swarm集群,但我目前正在努力解决如何接近日志目录的问题,因为我想扩大服务规模,同时保留日志目录的唯一性 考虑一下(显然)由docker compose组成的docker compose,它只是启动tomcat并挂载一个日志文件系统来捕获日志 版本:“2” 服务: tomcat: 图片:“tomcat:最新” 主机名:tomcat示例 命令:/start.sh 卷数: -“/data/container/tomca
版本:“2”
服务:
tomcat:
图片:“tomcat:最新”
主机名:tomcat示例
命令:/start.sh
卷数:
-“/data/container/tomcat/logs:/opt/tomcat/logs,z”
版本
- docker 1.11
- docker compose 1.7.1
- API版本1.21
docker compose scale tomcat=2
我将看到以下容器
- 主机名/tomcat_1
- 主机名/tomcat_2
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...]
如果您希望在特定位置有好看的名称,请使用脚本创建符号链接
然而,我仍然对这个解决方案持怀疑态度,尤其是在多主机群集环境中。在您的用例中,登录到一个外部的、专门的服务是一种方法。我认为更好的方法是将容器日志输出到stdout,并使用Docker的日志驱动程序稍后解析它们。Splunk在此处的列表中:。另外,
docker compose logs
将为您聚合日志,并在每个日志条目的前面添加容器名称和编号。我使用syslog驱动器来记录日志,效果非常好。它使扩展和添加服务易于管理。
[...snip...]
"Mounts": [
{
"Type": "volume",
"Name": "b8c...SomeHash...48d6e",
"Source": "/var/lib/docker/volumes/b8c...SomeHash...48d6e/_data",
"Destination": "/opt/tomcat/logs",
[...snip...]