docker-library / postgres

Docker Official Image packaging for Postgres
http://www.postgresql.org
MIT License
2.2k stars 1.14k forks source link

SQL files under docker-entrypoint-initdb.d are not executed even if data directory is not initialized #1226

Closed SimoneGiusso closed 7 months ago

SimoneGiusso commented 7 months ago

According to the documentation running docker compose on this yaml file:

services:
  masterdb:
    image: postgres:15.6-alpine
    container_name: primary-server
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: psw
    volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
  readonlydb:
    image: postgres:15.6-alpine
    container_name: hot-standby
    ports:
      - 5430:5432
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: psw

should initialise:

primary-server with init.sql.

However it does not happen even if the file is correctly mounted:

Screenshot 2024-04-13 at 22 21 18

Ii tried, to delete/re build the images, delete all the volumes but nothing. The init.sql script is not executed.

tianon commented 7 months ago

Compose works really hard to keep and re-use volumes between runs (including and especially "anonymous" volumes that aren't specified in the file, but are specified in the images in use), which is probably what you're running into.

Have you tried docker-compose down --volumes and/or docker-compose up --renew-anon-volumes?