在使用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
广告
将在 10 秒后关闭
bannerAds