如何在容器内创buildpostgres扩展?

我必须安装hstore到我的hstore postgres
这是我在shell中的普通命令来执行我的需要

 psql -d template1 -c 'create extension hstore'; 

如果我删除了这个行,我的容器,它的工作原理,但我自己执行hstore安装,我必须告诉我的项目中的每个人这样做,这不是一个好的做法

这是我的yml file

  postgres: build: context: . dockerfile: dockerfiles/devdb.dockerfile environment: POSTGRES_USER: uih POSTGRES_PASSWORD: uIhbod! POSTGRES_DB: uih_portal ports: - "5433:5432" 

这是我的docker文件devdb.dockerfile

 FROM postgres:9.5 RUN mkdir -p /var/lib/postgresql-static/data ENV PGDATA /var/lib/postgresql-static/data # psql -d template1 -c 'create extension hstore;' CMD ["psql", "-d", "template1", "-c", "'create extension hstore;'"] RUN echo "hstore extension installed" 

生成后,我无法得到它运行

 $ docker-compose up postgres Recreating uihportal_postgres_1 Attaching to uihportal_postgres_1 postgres_1 | psql: could not connect to server: No such file or directory postgres_1 | Is the server running locally and accepting postgres_1 | connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? uihportal_postgres_1 exited with code 2 

题:

如何从dockerfile安装hstore?
我想要为我的团队制作一个图像并重新用于整个项目

由于Postgres在构build期间没有在容器中运行,所以它失败了,它只在容器运行时在CMD启动。

Docker映像的入口点脚本支持运行设置步骤 – 容器启动时将执行/docker-entrypoint-initdb.d目录中的任何.sql或.sh文件。

所以你可以通过将你的扩展设置放在SQL脚本中,然后将脚本复制到init目录中的映像中来实现:

 > cat hstore.sql create extension hstore > cat Dockerfile FROM postgres:9.5 COPY hstore.sql /docker-entrypoint-initdb.d 

当你build立这个图像时,SQL脚本将被放置在正确的位置,所以无论何时从图像中运行一个容器,它都会安装扩展。