docker 卷在主机中存储在docker-compose的什么位置?

docker 卷在主机中存储在docker-compose的什么位置?

考虑以下docker-compose文件

version: "2"
services:
  postgres:
    image: postgres:9.6
    volumes:
      - ./vol_folder:/var/lib/postgresql
    ports:
      - "5432:5432"

以下是我的命令历史记录mac

docker-compose up

psql -h 192.168.99.100 -p 5432 -U postgres

create table test (my_id bigserial primary key);
INSERT INTO test (my_id) values (1);
SELECT * FROM test;

\q

原本我以为上述命令会在主机中.sql创建一个文件。但我没有看到任何文件,而只是在./vol_folder.sql./vol_folderdata./vol_folder

此外,如果我再次docker-compose down查看docker-compose up,我可以看到数据库中的数据现在已经消失了。

我怀疑当我在图像运行时创建数据时,数据没有被存储回来,./vol_folder因此当我重新启动时,没有任何内容可以从主机挂载。

所以我想我的问题是卷存储在主机的哪里?docker 卷是否只有单向(例如主机数据到容器)而不是双向?

答案1

这些卷通常存储在/var/lib/docker/volumes/

要了解更多信息,请尝试以下命令

docker volume ls
docker volume inspect <volume identifier>

也可以看看:https://www.linux.com/learn/docker-volumes-and-networks-compose

答案2

在 Mac 上

docker volume ls  
docker volume inspect <volume identifier>

将为您提供 Docker 虚拟文件系统内的挂载点,而不是您的 Mac 文件系统上的挂载点。

Docker 与 macOS 本身不兼容,因此使用 Hyperkit 来运行虚拟映像。其虚拟映像数据位于:

~/Library/Containers/com.docker.docker/Data/vms/0

您可以通过在虚拟环境中创建 shell 来调查 Docker 根目录:

screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
cd /var/lib/docker/volumes/<volume identifier>/_data
ls

您可以按 Ctrl+a,然后按 k 和 y 来终止此会话。

归功于:https://www.freecodecamp.org/news/where-are-docker-images-stored-docker-container-paths-explained/

相关内容