使用 docker 重新启动 postgres 时数据丢失

kam*_*pta 5 postgresql docker docker-compose

我正在运行一个带有以下内容的 postgres 实例docker-compose.yml-

postgres:
  restart: always
  image: postgres:latest
  volumes:
    - /data:/var/lib/postgresql
  ports:
    - "5432:5432"
  environment:
    - POSTGRES_USER=admin
    - POSTGRES_PASSWORD=123456
    - POSTGRES_DB=mydb
    - PGDATA=/var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)

我添加了一些行数很少的表。我对文件做了一个小改动,添加了container_name: postgres,然后重新启动docker-compose up -d

现在当我登录到数据库时,我看不到任何表/数据。

psql -h ###### -p 5432 -d mydb -U admin --password
Run Code Online (Sandbox Code Playgroud)

数据目录作为卷添加并且是完整的。

这与初始化postgres有关吗?

更新 2016/10/02

请注意,这/data是安装在主机上的外部硬盘驱动器docker-machine

更新 2016/10/02

我还注意到,当我更改docker-compose.yml(from /home/ubuntu/dev/docker-storage/docker-compose.ymlto /home/ubuntu/dev/storage/docker-compose.yml)的重命名位置并执行 a 时docker-compose up -d,我收到一条错误消息

ERROR: for postgres  Conflict. The name "/postgres" is already in use by container 6de8378a8156ec368748194f8912836a7b5e3212fbb69627093d0f6114b82f0d. 
You have to remove (or rename) that container to be able to reuse that name.
Run Code Online (Sandbox Code Playgroud)

这就是问题的来源吗?我可能已经移除了原来的容器。

更新 2016/10/06

这似乎现在起作用了。出于某种奇怪的原因,我不得不同时安装/var/lib/postgresql/var/lib/postgresql/data

postgres:
    restart: always
    image: postgres:latest
    container_name: postgres
    volumes:
      - /data/postgresql:/var/lib/postgresql
      - /data/postgresql/data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=123456
      - POSTGRES_DB=mydb
Run Code Online (Sandbox Code Playgroud)

sid*_*eni 8

你所做的是一个黑客!官方的做法是有一个名为 PGDATA 的环境变量,与容器卷路径相同

干得好:

postgres:
    restart: always
    image: postgres:latest
    container_name: postgres
    volumes:
      - ${PATH_TO_STORAGE}:/var/lib/postgresql/data/:rw <--- check this out
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      PGDATA: /var/lib/postgresql/data/ <--- Check this out

Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)