[英]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.