docker-compose下来不保留PostgreSQL数据

丢失字节

我的docker-compose文件:

version: '3'

services:
  app:
    container_name: application
    build: .cloud/php
    image: app-application
    depends_on:
      - pgres
    ports:
      - "9050:9000"
    volumes:
      - ./:/var/www:cached
    networks:
      - application_network

  nginx:
    container_name: application.nginx
    image: nginx
    ports:
      - "8050:8000"
    volumes:
      - .cloud/nginx/nginx.conf:/etc/nginx/conf.d/default.conf:cached
      - ./:/var/www:cached
    depends_on:
      - app
    networks:
      - application_network

  pgres:
    container_name: application.postgres
    image: postgres
    restart: always
    ports:
      - "54325:5432"
    environment:
      POSTGRES_DB: application
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example
      PGDATA: /tmp
    volumes:
      - .cloud/postgres/data:/var/lib/postgresql/data
    networks:
      - application_network
networks:
  application_network:
    driver: bridge

当我运行docker-compose down时,postgresql数据不持久并且数据库完全重置。我试图将postgresql卷放入其自己的/ postgresql / data文件夹中,但结果仍然相同。我在这里想念什么?

凯南·古勒

问题在这里

    environment:
      PGDATA: /tmp
    volumes:
      - .cloud/postgres/data:/var/lib/postgresql/data

使用PGDATAenv var,您将显式设置clustur数据目录因此,它的作用是,一旦您启动容器(例如通过docker-compose up),Postgres服务器将根据您PGDATA/tmp目录中设置持久化数据库数据另一方面,您正在容器(/var/lib/postgresql/data中安装了其他路径,而不是/tmp路径。因此,一旦运行docker-compose down,容器和保存的数据/tmp永久消失,因为/tmp未将其设置为安装点。因此,除非您确实需要这样做,否则最好不要触摸它。

工作配置看起来可能如此(为简洁起见,缩短了):

version: '3'
services:
  pgres:
    image: "postgres" # use latest official postgres version or a specific version e.g. postgres:10.12
    volumes:
      - .cloud/postgres/:/var/lib/postgresql/data/ # persist data even if container shuts down

另一件事是,甚至可以说您PGDATA是这样配置的

    environment:
      PGDATA: /tmp
    volumes:
      - .cloud/postgres/data:/tmp

这不会是一个好主意,因为路径/tmp是在您的情况,正如其名字tmp临时)建议,真的不可靠。docker-compose down可能根本不会影响它,但是在下次启动时(即,再次运行docker-compose up时),底层操作系统(Linux)很可能会删除目录的内容/tmp,因此安装的本地目录.cloud/postgres/data也将立即清空,并且您的持久化目录仍然存在。数据将消失。在任何情况下,该/tmp目录都由Linux进行某种程度的管理,因此保存在该目录中的数据可能随时会消失-因此请不要依赖它!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章