在使用docker-compose创建PostgreSQL时要注意的事项
如果在尝试使用docker-compose创建PostgreSQL时遇到以下错误,请采取以下解决方案。
参考来源:
https://stackoverflow.com/questions/51168558/how-to-mount-a-postgresql-volume-using-aws-ebs-in-kubernete
postgres-db | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
postgres-db | It contains a dot-prefixed/invisible file, perhaps due to it being a mount point.
postgres-db | Using a mount point directly as the data directory is not recommended.
postgres-db | Create a subdirectory under the mount point.
postgres-db exited with code 1
尝试在/var/lib/postgresql/data目录下创建数据时失败了。
可以通过指定环境变量PGDATA来指定数据库主体的存储位置,将其从默认的/var/lib/postgresql/data更改为更深一层的/var/lib/postgresql/data/pgdata(也可以使用其他名称),从而解决这个问题。
在给定示例中,通过挂载容器的/var/lib/postgresql/data到卷/postgres_root,并使用/environment PGDATA来在更深一层的/var/lib/postgresql/data/pgdata处创建数据。
2020年10月23日修改
在Mac和Windows中,发现没有成功的方法来修复volume:postgres_root:driver_opts:type:none的问题。
version: '3'
services:
postgres:
image: postgres:12.2
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 'pass'
POSTGRES_DB: 'pg'
PGDATA: /var/lib/postgresql/data/pgdata
ports:
- 5432:5432
container_name: postgres-db
volumes:
- ./db/postgres:/var/lib/postgresql/data
- ./db/logs:/var/log