繁体   English   中英

Docker 容器将日志保存在主机目录

[英]Docker container save logs on the host directory

我也有类似的问题, 这一个 运行我docker-compose.yml文件时,我会自动创建一个dockerfile映像,并按照我的dockerfile指定运行某些应用程序。 这些应用程序产生一些日志,但这些日志写入泊坞窗容器,在/home/logs/文件夹。

如何指示这些日志写在容器外部,在我的/path/on/host地址上? 仅仅是因为如果容器发生故障,我需要查看日志而不是丢失它们!

这是我docker-compose.yml

version: '3'
services:
  myapp:
    build: .
    image: myapp
    ports:
      - "9001:9001"

这是我的dockerfile

FROM java:latest
COPY myapp-1.0.jar /home
CMD java -jar /home/myapp-1.0.jar

我只是在生产机器上使用docker-compose up -d运行它。

(顺便说一句,我是码头工人的新手。我所有的步骤都正确吗?我错过了什么吗?!我看到一切都很好,但我的应用程序正在运行!)

您只需要一个 docker 卷即可保存日志文件。 因此,在与 docker-compose.yml 相同的目录中创建一个日志目录,然后定义一个卷挂载。 定义挂载时,请记住语法是<host_machine_directy>:<container_directory>

试试下面的卷,让我知道你得到了什么。

version: '3'
services:
  myapp:
    build: .
    image: myapp
    ports:
      - "9001:9001"
    volumes:
      - ./logs:/home/logs

同样值得注意的是,持久性与这种方法是双向的。 从容器内对文件所做的任何更改都会反映回主机。 来自主机的任何更改也会反映在容器内。

  • 是的,您可以使用绑定安装将卷从主机装入容器,如上述答案中所述

  • 在生产中,我强烈建议将所有容器的日志发送到某个中心位置,这样即使整个 docker 主机宕机,您仍然可以访问日志,并且可能可以轻松地分析、过滤、设置日志错误的观察者并制作仪表板,比如麋鹿

https://docs.docker.com/config/containers/logging/configure/

为此,您需要将应用程序配置为将日志发送到 stdout,然后配置 docker 守护程序将日志发送到您的端点之一,例如logstash ,然后您可以配置 logstash 进行一些预处理(如果需要) ),然后将其流式传输到您的elasticsearch实例。

往前一步,你可以考虑容器管理体系,比如有中央记录到ELK和测光promethous kubernetes。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM