在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
查看容器日志 先使用 172.17.0.1 - - [24/Mar/2019:03:51:21 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-" 一般来说使用容器ID的前3位即可 以上就是我们查看容器日志的日常方法了,非常简单实用。 容器日志文件存储 容器的日志会以json文件方式存储在本地磁盘,可以使用下面方式查看文件路径
注意1:mac上没有/var/lib/docker目录 ,因为docker for mac的运作方式不一样,最好使用linux系统练习。 注意2: 如果LogPath内容为空,大概是因为docker engine版本,升级docker版本能到docker-ce 18.09.3 查看 d2408a7931c95a3a83ffeca2fba887763cf925a67890ef3be4d9ff838aa25b00-json.log 文件,可以看到:
这条信息的log字段内容和之前通过 docker logs 命令查看的内容一致。 容器日志会跟随容器生命周期,容器销毁后日志也会销毁。使用 docker stop 24 关停测试的nginx服务。因为容器启动使用时候用了 --rm 参数,关停后会自动清理删除,所以会发现 /var/lib/docker/containers/d2408a7931c95a3a83ffeca2fba887763cf925a67890ef3be4d9ff838aa25b00 目录不存在了,相应的日志文件也就删除了。 容器日志文件滚动策略 docker容器日志默认写入json文件,在线上运行时候会有磁盘写满的风险。可以调整策略,让其进行滚动。修改/etc/docker/daemon.json(如果没有就手工创建一个),增加下面内容: { "log-opts": { "max-size": "1m", "max-file": "3" } } 修改完成后重启docker服务: systemctl daemon-reload systemctl restart docker.service 测试一下新的日志策略,使用下面的命令创建一个容器: docker run -d --rm alpine:3.6 sh -c "while true; do echo hello world; usleep 10; done" 这个alpine容器就是每隔10微秒输出hello world,保持高频度输出,快速生产日志文件。 注:shell中的时间控制 1、sleep : 默认为秒。 2、usleep : 默认以微秒。 1s = 1000ms = 1000000us 按照前文中查看日志文件的方法 # pwd /var/lib/docker/containers/aa3307f5b42770319129e126122be123cfd8e0ebe1c412371ad27e62faa007e3 # ls -lah total 2.6M drwx------ 4 root root 4.0K Mar 24 16:22 . drwx------ 3 root root 4.0K Mar 24 16:21 .. -rw-r----- 1 root root 647K Mar 24 16:22 aa3307f5b42770319129e126122be123cfd8e0ebe1c412371ad27e62faa007e3-json.log -rw-r----- 1 root root 977K Mar 24 16:22 aa3307f5b42770319129e126122be123cfd8e0ebe1c412371ad27e62faa007e3-json.log.1 -rw-r----- 1 root root 977K Mar 24 16:21 aa3307f5b42770319129e126122be123cfd8e0ebe1c412371ad27e62faa007e3-json.log.2 很容易发现,日志文件的策略就是维持3个1m大小文件存在,和我们设置保持一致。 测试完成后,记得使用docker stop aa3 清理测试现场,max-size也可以按照真实需求调整大小。 nginx容器日志 了解docker容器的日志策略后,再看看常用的容器是如何处理的。先看看nginx容器。 首先 docker run -it --rm -d -p 80:80 nginx:1.15.8-alpine 创建一个nginx容器,然后 docker exec -it b6d sh 进入容器,查看/etc/nginx/nginx.conf可以看到下面内容: error_log /var/log/nginx/error.log warn; access_log /var/log/nginx/access.log main; 也就是nginx会将错误日志和访问日志写入对应的日志文件。继续查看/var/log/nginx目录: /var/log/nginx # ls -lah total 0 drwxr-xr-x 2 root root 39 Mar 4 07:54 . drwxr-xr-x 3 root root 18 Mar 4 07:54 .. lrwxrwxrwx 1 root root 11 Jan 31 23:32 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Jan 31 23:32 error.log -> /dev/stderr 这就发现奥秘了,access.log文件会通过软链接重定向到标准输出,而错误日志error.log则会重定向标准错误。这样使用docker log命令就可以看到nginx的访问日志了。 为了进一步验证,查看nginx dockerfile文件,其中有: # forward request and error logs to docker log collector && ln -sf /dev/stdout /var/log/nginx/access.log \ && ln -sf /dev/stderr /var/log/nginx/error.log 可见nginx镜像创建时候就定义好了日志文件的输出。 同样使用docker stop 524清理现场,以后就不再介绍清理这一步骤了。 mysql容器日志 启动一个mysql容器 docker run --rm -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 不难看到mysql容器日志输出, 截取其中片段如下:
查看mysql Dockerfile 文件,可以知道mysql镜像启动入口在entrypoint.sh,从脚本中发现: echo 'Initializing database' "$@" --initialize-insecure echo 'Database initialized' 这样就是mysql容器启动时候的输出对应起来了。entrypoint.sh比较复杂,主要功能就是启动mysqld,并将日志输出,因为不是本文重点,就不详细介绍了。 总结
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
请发表评论