Run script after container entrypoint in docker-compose

后端 未结 1 1834
攒了一身酷
攒了一身酷 2021-02-10 03:06

I have a postgres:9.5.6-alpine container, and another container, named web, which has to be linked to it. I want to run a script named create_db.sh in postgres cont

1条回答
  •  逝去的感伤
    2021-02-10 04:02

    You are overriding the original command and you do not start postgres in this script which is why your database is not available.

    You can put your database initialization into the container's entrypoint directory: /docker-entrypoint-initdb.d. This executes all *.sh and *.sql files in this directory and does not touch the original command.
    All files in this directory are automatically executed in the alphabetical order on container creation. Therefore, create a volume to add your scripts / sql files to the entrypoint and let the container execute them. This is described in the official postgres documentation, section "How to extend this image".

    Your compose file then changes to something like this:

    postgres:
      build: ./postgres
      volumes:
        - /shared_folder/postgresql:/var/lib/postgresql
        - ./db-init-scripts:/docker-entrypoint-initdb.d
      ports:
        - "5432:5432"
    

    whereas a local directory, e.g. db-init-scripts, contains your initialization scripts (rename it if you want). Copy create_db.sh to this folder and it will be automatically executed when you create a new container.

    Several database-images watch this entrypoint-directory, which is very convenient.

    Your container_name: postgres seems redundant.

    0 讨论(0)
提交回复
热议问题