代码之家  ›  专栏  ›  技术社区  ›  Shui shengbao

根据容器id查找docker文件路径

  •  0
  • Shui shengbao  · 技术社区  · 6 年前

    我想把Docker容器日志下载到本地。我知道我的集装箱的集装箱号。

    现在,我用 df -h 找到docker文件路径。这样地 /data/docker/overlay2/ea3e1ad0ccdee0e41d83722dfc6bf913250abd57918fecabd1067736b3e44305/merged . 但是我有多个容器,很难知道容器的文件路径。

    我怎么知道 ea3e1ad0ccdee0e41d83722dfc6bf913250abd57918fecabd1067736b3e44305 根据我的集装箱编号。

    7 回复  |  直到 6 年前
        1
  •  3
  •   upHiller    6 年前

    列出容器

     docker ps
    

    在日志所在的容器中导航。

     docker exec -it ContainerId bash
    

    在容器中找到日志

    bash-4.2$ cd yourapplication/path/log/
    

    出口集装箱

      bash-4.2$ exit
    

    复制到本地位置

     docker cp edd5064178db:yourapplication/path/log/request.log /your/local/location
    
        2
  •  2
  •   Jason Greathouse    6 年前

    您可以使用 docker inspect .

    可能有一个更干净的解决方案,但是我在一些人的帮助下找到了容器id xargs jq .

    docker ps -a -q | xargs docker inspect | jq '.[] | select(.GraphDriver.Data.LowerDir | contains("ea3e1ad0ccdee0e41d83722dfc6bf913250abd57918fecabd1067736b3e44305")) | .Id'
    
    • docker ps -a -q 获取所有容器ID的列表。
    • xargs docker inspect 获取每个容器的详细信息。
    • jq公司 搜索列表并返回 Id 中引用图像层的任何容器的 GraphDriver 反对。
        3
  •  1
  •   smaftoul    6 年前

    您可以提取准确的mergeddir(它不同于容器id),如下所示:

    $ docker inspect --format='{{json .GraphDriver.Data.MergedDir}}' container-id
    "/var/lib/docker/overlay2/the-string-you-are-searching-for/merged"
    
        4
  •  0
  •   Sebastian Brosch Navjyot    6 年前

    你可以使用 docker ps 命令 --no-trunc 选项如下:

    docker ps -a --no-trunc
    

    您只能看到容器ID的前12位,因为默认情况下输出会被截断。

        5
  •  0
  •   David Maze    6 年前

    这个 docker logs 命令将容器进程的stdout和stderr复制到它自己的stdout和stderr,您可以从那里保存它们。您还可以配置 docker run 将日志发送到另一个服务,如本地syslog或某个地方的logstash安装(但这会使 docker日志 不再工作)。

    docker logs $CONTAINER_ID >$CONTAINER_ID.log 2>&1
    

    如果它记录到一个文件,你可以 docker cp 出来吧

    docker cp $CONTAINER_ID/usr/local/apache2/logs/access.log $CONTAINER_ID.access.log
    

    但最好还是在启动容器时将主机目录绑定安装到日志目录,这样就不成问题了

    docker stop $CONTAINER_ID
    docker rm $CONTAINER_ID
    docker run -v $PWD/logs:/usr/local/apache2/logs ...
    

    直接访问 /var/lib/docker 通常不被认为是个好主意。这个 overlay2 目录有 部分 对于每个映像和每个容器的文件系统, 如果 您的系统使用的是“overlay2”存储驱动程序(aufs和devicemapper过去都很常见,它们会将内容保存在不同的子目录中)。

        6
  •  0
  •   Dmitriy Fialkovskiy    6 年前

    使用下面的命令

    docker inspect --format {{.Id}} "ContainerName"

    您将看到容器装载id。

        7
  •  0
  •   Abhishek Jain    5 年前

    如果您没有将日志路由到本地存储的任何云,请运行下面的命令以获取docker存储容器日志的文件位置-

    如果您知道容器ID,则使用以下命令获取包含位置的文件名,然后可以下载或使用相同的命令执行任何操作-

    docker inspect --format={{.LogPath}} <ContainerID>
    

    这个命令将提供/var/lib/docker/containers这样的位置//