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

查看临时docker容器的标准输出和日志,docker,Docker,我知道有很多关于如何阅读docker日志的问题,答案如下: $ docker logs containername 但是,我使用的是一个临时容器,一个使用-rm创建的容器,所以在创建之后我没有时间调用日志。但我仍然对它的运行日志感兴趣 我的命令是: docker run --name myname --rm python-my-script:3.7.4 - --myflags "myargs" 现在,我想看看我的脚本如何使用这些参数运行。我的entrypoint有一个脚本,可以有效地读入并

我知道有很多关于如何阅读docker日志的问题,答案如下:

$ docker logs containername
但是,我使用的是一个临时容器,一个使用-rm创建的容器,所以在创建之后我没有时间调用日志。但我仍然对它的运行日志感兴趣

我的命令是:

docker run --name myname --rm  python-my-script:3.7.4 - --myflags "myargs"
现在,我想看看我的脚本如何使用这些参数运行。我的entrypoint有一个脚本,可以有效地读入并将“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这样的重量级软件。

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

对于您的情况,您需要更改日志驱动程序,以确保即使在删除容器后仍可以看到日志

有很多日志驱动程序可以满足您的要求,请参阅。例如fluentd、splunk等

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

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

    $ docker run --log-driver=journald --rm --name=trial alpine echo "hello world"
    
  • 容器完成打印“hello world”后,容器将被删除,因为它指定了
    --rm
    ,请检查
    码头工人日志是否正常:

    $ docker logs trial
    Error: No such container: trial
    
  • 使用日志查看是否可以获取日志:

    $ 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”

    顺便说一句,如果您不希望每次启动容器时都指定
    --日志驱动程序
    ,也可以在
    daemon.json
    中将其设置为默认日志驱动程序,请参阅:


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

    您是否尝试过在前台模式下运行它?因为我没有使用-d标志,所以我认为前台是默认的,对吗?看起来您的容器没有运行。您最好尝试运行
    -it
    标志,检查是否有任何东西杀死了您的容器。检查日志是下一步,我知道如何使用-it标志交互调用docker,这不是我的目标。这个过程运行得很快,rm按照我的要求完成了它。我正在寻找stderr和stdout,当它运行时,在它停止运行后。
    {
      "log-driver": "journald"
    }