我一直在尝试通过创建自定义用户和数据库来为开发postgres实例设置容器.我正在使用官方的postgres docker图像.在文档中,它指示您在/docker-entrypoint-initdb.d/文件夹中插入一个bash脚本,以使用任何自定义参数设置数据库.
su postgres -c "createuser -w -d -r -s docker"
su postgres -c "createdb -O docker docker"
Run Code Online (Sandbox Code Playgroud)
FROM library/postgres
RUN ["mkdir", "/docker-entrypoint-initdb.d"]
ADD make_db.sh /docker-entrypoint-initdb.d/
Run Code Online (Sandbox Code Playgroud)
我从docker logs -f db(db是我的容器名称)得到的错误是:
createuser:无法连接到数据库postgres:无法连接到服务器:没有这样的文件或目录
似乎/docker-entrypoint-initdb.d/在postgres启动之前正在执行文件夹内的命令.我的问题是,如何使用官方postgres容器以编程方式设置用户/数据库?有没有办法用脚本执行此操作?
这个问题与此相关:Docker - How can run the psql command in the postgres container?
但是上面提供的解决方案仅在您手动执行操作时才有效,而这里人们希望使用 docker-compose 自动执行操作。
所以这个 docker 容器可以工作:
FROM postgres
COPY init.sql /docker-entrypoint-initdb.d/
Run Code Online (Sandbox Code Playgroud)
但是这个 docker 容器失败了:
FROM postgres
RUN psql -U postgres -c "CREATE USER user WITH PASSWORD 'pass';"
Run Code Online (Sandbox Code Playgroud)
因为当执行 RUN 时,postgresql 服务器还没有!
有没有办法克服这个限制?