查看临时Docker容器的标准输出和日志

时间:2019-08-04 00:20:36

标签: docker

我了解到有关如何读取docker日志的许多问题,这些回答由:

$ docker logs containername

但是,我正在使用一个临时容器,该容器是用-rm创建的,因此创建之后我没有时间调用日志。但是我仍然对查看其运行方式感兴趣。

我的命令是:

docker run --name myname --rm  python-my-script:3.7.4 - --myflags "myargs"

现在,我想看看我的脚本如何使用这些参数运行。我的入口点具有一个脚本,该脚本应该有效地读取“ myargs”并将其打印到控制台。

但是当我这样做时:

docker logs myname
Error: No such container: myname

或者,如果我真的很快:

Error response from daemon: can not get logs from container which is dead or marked for removal

如何查看不再运行的容器的日志?我不想安装像syslog这样的重量级的东西。

1 个答案:

答案 0 :(得分:1)

Docker的默认日志记录驱动程序是json-file,您可以使用docker logs来查看它。但是,如果您删除容器或在运行容器时使用--rm,则删除容器后日志将被删除。

对于您而言,您需要更改日志记录驱动程序以确保即使删除容器后仍可以看到日志。

有许多日志记录驱动程序可以满足您的要求,请参见this。例如流利,散弹等。

在这里,提供一种最简单的保留日志的方法,使用journald,这是供您参考的最小示例:

  1. 使用日记日志驱动程序启动容器,需要设置一个容器名称,该名称将在以后用于检索日志:

    $ docker run --log-driver=journald --rm --name=trial alpine echo "hello world"
    
  2. 在容器完成打印“ hello world”之后,将按照指定的--rm删除容器,检查docker logs是否正常:

    $ docker logs trial
    Error: No such container: trial
    
  3. 如果可以获取日志,请使用日记记录:

    $ journalctl CONTAINER_NAME=trial --all
    -- Logs begin at Mon 2018-12-17 21:35:55 CST, end at Mon 2019-08-05 14:21:19 CST. --
    Aug 05 14:18:26 shubuntu1 a475febe91c1[1975]: hello world
    

您可以看到即使删除了容器,也可以使用journalctl获取日志内容“ hello world”。

顺便说一句,如果您不想每次启动容器时都指定--log-driver,还可以在daemon.json中将其设置为默认日志驱动程序,请参见this

{
  "log-driver": "journald"
}

同时,如果容器未被删除,您仍然可以使用docker logs来获取日志。