如何在由docker-compose处理的postgres docker容器中运行psql命令?

时间:2018-04-27 14:00:21

标签: postgresql docker docker-compose dockerfile

这个问题与此问题有关:Docker - How can run the psql command in the postgres container?

但上面提供的解决方案仅在您手动执行时有效,而此处您希望使用docker-compose自动执行操作。

所以这个docker容器可以工作:

FROM postgres
COPY init.sql /docker-entrypoint-initdb.d/

但此泊坞窗容器失败:

FROM postgres
RUN psql -U postgres -c "CREATE USER user WITH PASSWORD 'pass';"

因为在执行RUN时,postgresql服务器已经了!

有没有办法克服这个限制?

1 个答案:

答案 0 :(得分:2)

当您使用脚本将文件夹挂载到/docker-entrypoint-initdb.d/安装文件夹sql的docker-compose.yml时,可以在posgres中运行一些脚本。 postgres图像非常棒,每次postgres启动时都会运行脚本...

version: '3.6'

services:  
  my_db:
    image: postgres:alpine
    volumes: ["/somepath/sql/:/docker-entrypoint-initdb.d/"]

/somepath/

的文件结构
- docker-compose.yml
- sql
  - new_extension.sql

cat sql/new_extension.sql

/* create extension for cureent DB */
CREATE EXTENSION IF NOT EXISTS citext;
/* create extension over the template1 so all created databases after that also have the extension */
\c template1
CREATE EXTENSION IF NOT EXISTS citext;