DockerのPostgreSQLで「initdb: error: directory “” exists but is not empty」
今回はDockerのPostgreSQLで下記のようなエラーが起きたときの対処法についてお話ししていこうと思います。
1 2 3 4 5 |
sample-db | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty sample-db | It contains a dot-prefixed/invisible file, perhaps due to it being a mount point. sample-db | Using a mount point directly as the data directory is not recommended. sample-db | Create a subdirectory under the mount point. sample-db exited with code 1 |
DockerのPostgreSQLで「initdb: error: directory “" exists but is not empty」
結論から言うと、PostgreSQLのDockerでマウントしているVolumeにドットがついている隠しファイルがあるとこのエラーが起こります。
例えば、docker-compose.ymlで
1 2 3 4 5 |
version: '3' services: db: volumes: - ./docker-postgres/data:/var/lib/postgresql/data |
と指定していた場合に、
./docker-postgres/
のフォルダに.gitkeepなどの隠しファイルがあるとこのエラーが起こるでしょう。
解決策としては、エラーメッセージにある通り、PostgreSQLのデータの保存先でサブディレクトリを設置すると解決できます。
docker-compose.ymlのenvironmentのPGDATAでサブディレクトリの絶対パスを指定できるので、適当な名称でサブディレクトリを設置すると良いでしょう。
1 2 3 4 5 6 7 |
version: '3' services: db: volumes: - ./docker-postgres/data:/var/lib/postgresql/data environment: PGDATA: /var/lib/postgresql/data/pgdata |
終わりに
今回はDockerのPostgreSQLで冒頭のようなエラーが起きたときの対処法についてお話しいたしました。
ディスカッション
コメント一覧
まだ、コメントがありません