容器内如何查看Docker宿主机的目录

18

我想把一些文件从我的Docker容器复制到本地主机,我查阅了文档得知可以通过以下方式完成:

docker cp 'container':path/to/file dest/path 

但是这需要我知道容器中我想要进入的路径和目录,我该如何查看容器的目录?我尝试过使用docker diff和docker inspect,但这些命令并不能显示容器的文件目录。
2个回答

35

你首先需要知道正在运行的实例的名称?

$ docker ps

CONTAINER ID  IMAGE        COMMAND  CREATED  STATUS  PORTS  NAMES
36029...      image/image  ...      1 sec..  Up..    ...    some-container

现在,进入容器并查找您需要的内容。假设容器名称为some-image。

$ docker exec -it some-container /bin/bash

root@1f3420c939:/var/www/html#

如果您已经知道文件夹的位置:

docker exec -it some-container ls /path/to/file

编辑:

正如@Konrad Botor所指出的那样,也可以使用容器ID而不是容器名称,更重要的是,并非所有图像都安装了bash(alpine是最常用的不使用它的图像)。

这里有一个 alpine 的示例:

docker run -d \
    --rm \
    --name my_alpine_container \
    alpine \
    sleep 3600

CONTAINER_ID=$( docker ps -q my_alpine_container )

# to "enter" the container:
docker exec -it $CONTAINER_ID sh

$instance_name是什么意思?您是指Docker ps命令中NAMES列下的内容,还是镜像名称或容器ID? - Meir Snyder
好的,实例正在运行吗?如果是的话,如果您需要将文件复制到该实例中,则使用最后一列。编辑:在“名称”下列出了什么。 - Stefano
1
容器ID和名称都应该正常工作。另外,并非每个镜像都安装了Bash。例如,大多数基于Alpine的镜像没有安装Bash。 - Konrad Botor
如果您有一个没有bash的alpine镜像,则可以使用上述第二个命令 - docker exec -it container_name ls。 这意味着无论您想在bash中运行什么,都要使用docker容器命令运行它(因为容器内部不提供bash)。 - Abhishek Shah
Alpine使用/bin/ash。因此,只需输入“docker exec -it <id> ash”即可。 - Peter Teoh

-7

docker ps 命令会显示正在运行的容器,而不是任何给定容器内部的目录结构。 - programmerq
docker ps 是用于另一件事情的。 - masoud p

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接