我的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
使用PGDATA
env 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] 删除。
我来说两句