考虑以下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_folder
data
./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/