根据容器ID查找

时间:2018-07-27 07:58:18

标签: docker

我想将Docker容器日志下载到本地。我知道我的容器的容器ID。

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

如何根据我的容器ID知道ea3e1ad0ccdee0e41d83722dfc6bf913250abd57918fecabd1067736b3e44305

7 个答案:

答案 0 :(得分:2)

列出容器

 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

答案 1 :(得分:0)

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

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),则为 都相当普遍,并且会将它们保存在不同的子目录中。

答案 2 :(得分:0)

您可以像这样提取确切的mergeddir(与容器ID不同):

@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class WorkingOk {

    @Configuration
    public static class Config {
        @Bean
        public static PropertyPlaceholderConfigurer properties() {
            PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
            Resource[] resources = new ClassPathResource[] { 
                    new ClassPathResource( "someprops.properties" )
            };
            ppc.setLocations( resources );
            ppc.setIgnoreUnresolvablePlaceholders( true );
            return ppc;
        }
    }

    @Value("${somevalue}")
    private Boolean somevalue;

    @Test
    public void test1() {
        System.out.println("somevalue: " + somevalue);
    }
}

答案 3 :(得分:0)

使用以下命令

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

您将看到容器安装ID。

答案 4 :(得分:0)

您可以使用docker inspect查找与容器关联的图像层。

也许有一个更清洁的解决方案,但是我可以在xargsjq的帮助下找到容器ID。

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对象中图像层的所有容器。

答案 5 :(得分:0)

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

如果您知道容器ID,则使用以下命令获取具有位置的文件名,然后就可以下载或使用该文件进行任何操作-

p1 + characters[a][b][c]

此命令将为您提供/ var / lib / docker / containers //

答案 6 :(得分:0)

如果您有多个容器 /images 正在运行,请使用以下命令。

 for  i in $(docker images -q );do docker inspect  $i |grep <the-string-you-are-searching-for>  ;echo $i ;done

for  i in $(docker ps -aq );do docker inspect  $i |grep <the-string-you-are-searching-for>  ;echo $i ;done