【问题标题】:Docker volume data does not get saved to host folder in macDocker 卷数据未保存到 mac 中的主机文件夹
【发布时间】:2017-02-24 06:23:06
【问题描述】:

这是我的 docker compose 文件

version "2"
services:
    my_postgres:
        image: postgres:9.6
        volumes:
          - /Users/my_user_name/test_docker/my_volume_space:/var/lib/postgresql
        ports:
          - "5432:5432"

我在mac中输入了以下命令

docker-machine start
docker-machine env
evcal "$(docker-machine env default)"

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

本来我以为上面的命令会导致在主机的./my_volume_space中创建一个.sql文件。但我在./my_volume_space 中看不到任何.sql 文件,而在./my_volume_space 中只有一个空的data 目录

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

我怀疑我在镜像运行时创建数据时,数据没有存储回./my_volume_space,因此当我重新启动时,主机上没有任何东西可以挂载。

谁能告诉我我做错了什么?

谢谢

【问题讨论】:

  • 您是否检查过“同步”是否有效,例如通过附加到 my_postgres 容器并执行类似“touch /var/lib/postgresql/testfile.txt”之类的操作?如果它出现在您的主机中,那么该图像可能会将 pg 数据保存在其他地方,或者它还没有完成同步,因为使用 osxfs 在 mac 上安装 docker 卷真的很慢。我什至写了一篇关于这个的文章:espeo.eu/blog/docker-for-mac-performance-tweaks/

标签: postgresql docker containers docker-compose


【解决方案1】:

路径卷在带有 postgres 映像 source 的 docker-machine (macOS) 上不起作用。

解决方法是使用命名卷。 docker-compose.yaml 示例:

services:
  test-postgres-compose :
    ...
    volumes :
      - pgdata:/var/lib/postgresql/data
...
volumes :
  pgdata :

Docker compose volumes info

【讨论】:

    【解决方案2】:

    我相信容器上的卷路径是/var/lib/postgresql/data 而不是/var/lib/postgresql

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2016-02-08
      • 2016-11-18
      • 2020-05-11
      • 1970-01-01
      相关资源
      最近更新 更多