这个问题与此问题有关: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服务器已经不了!
有没有办法克服这个限制?
答案 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;