我一直试图通过创建自定义用户和数据库来为开发postgres实例设置一个容器。我使用的是官方postgres docker映像。在文档中,它指导你在/docker-entrypoint-initdb中插入一个bash脚本。D /文件夹,使用任何自定义参数设置数据库。
我的bash脚本:make_db.sh
su postgres -c "createuser -w -d -r -s docker"
su postgres -c "createdb -O docker docker"
Dockerfile
FROM library/postgres
RUN ["mkdir", "/docker-entrypoint-initdb.d"]
ADD make_db.sh /docker-entrypoint-initdb.d/
我从docker日志-f db (db是我的容器名)得到的错误是:
postgres:不能连接到服务器:没有这样的文件或目录
看起来/docker-entrypoint-initdb. conf文件中的命令。在postgres启动之前,正在执行D /文件夹。我的问题是,如何使用官方postgres容器以编程方式设置用户/数据库?有什么方法可以用脚本来做到这一点吗?
使用docker-compose:
假设你有以下目录布局:
$MYAPP_ROOT/docker-compose.yml
/Docker/init.sql
/Docker/db.Dockerfile
文件:docker-compose.yml
version: "3.3"
services:
db:
build:
context: ./Docker
dockerfile: db.Dockerfile
volumes:
- ./var/pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
文件:码头工人/ init.sql
CREATE USER myUser;
CREATE DATABASE myApp_dev;
GRANT ALL PRIVILEGES ON DATABASE myApp_dev TO myUser;
CREATE DATABASE myApp_test;
GRANT ALL PRIVILEGES ON DATABASE myApp_test TO myUser;
文件:码头工人/ db。Dockerfile
FROM postgres:11.5-alpine
COPY init.sql /docker-entrypoint-initdb.d/
组合和启动服务:
docker-compose -f docker-compose.yml up --no-start
docker-compose -f docker-compose.yml start