当前位置: 首页 > 知识库问答 >
问题:

如何在脚本中为Docker Postgres创建用户/数据库

齐阳
2023-03-14
su postgres -c "createuser -w -d -r -s docker"
su postgres -c "createdb -O docker docker"
FROM library/postgres

RUN ["mkdir", "/docker-entrypoint-initdb.d"]
ADD make_db.sh /docker-entrypoint-initdb.d/

CreateUser:无法连接到数据库postgres:无法连接到服务器:没有这样的文件或目录

似乎在启动postgres之前正在执行/docker-entrypoint-initdb.d/文件夹中的命令。我的问题是,我如何使用官方的postgres容器以编程方式设置用户/数据库?有没有办法用脚本做到这一点?

共有1个答案

公西修文
2023-03-14

正式的postgres docker映像将运行.sql脚本,该脚本位于/docker-entrypoint-initdb.d/文件夹中。

所以您所需要的只是创建以下sql脚本:

init.sql

CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;

DockerFile

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

但是自2015年7月8日起,如果您只需要创建一个用户和数据库,那么只需要使用postgres_userpostgres_passwordpostgres_db环境变量就更容易了:

docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres

或使用DockerFile:

FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker

从postgres Docker映像的文档中可以看出

[...]它将从目录[/docker-entrypoint-initdb.d]中找到任何*.sh脚本获取源,以便在启动服务之前进行进一步初始化

这里重要的是“启动服务之前”。这意味着脚本make_db.sh将在postgres服务启动之前执行,因此会出现错误消息“Could not connect to database postgres”。

我同意这可能是有点神秘的第一眼看。它所说的是,您的初始化脚本应该在执行其操作之前以单一模式启动postgres服务。因此您可以按如下所示更改make_db.ksh脚本,它将使您更接近您想要的:

注意,这在最近的提交中发生了变化。这将适用于最新的更改:

export PGUSER=postgres
psql <<- EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL

以前,需要使用--single模式:

gosu postgres postgres --single <<- EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
 类似资料:
  • 问题内容: 我一直在尝试通过创建自定义用户和数据库来为开发postgres实例设置容器。我正在使用官方的postgres docker镜像 。在文档中,它指示您在文件夹内插入bash脚本以使用任何自定义参数设置数据库。 我的bash脚本:make_db.sh Docker文件 我从(db是我的容器名称)得到的错误是: createuser:无法连接到数据库postgres:无法连接到服务器:没有这

  • 问题内容: 我们正在为Joomla创建XML API,允许合作伙伴网站在我们的网站上为其用户创建新帐户。 我们已经创建了一个独立的PHP脚本来处理和验证API请求,但是现在我们需要实际创建新帐户。最初我们只是考虑进行CURL调用以提交注册表单,但是我们意识到用户令牌存在问题。是否有另一种干净的方法可以创建用户帐户而不用担心Joomla?如果我们必须做一些手术,最好的方法是什么? 问题答案: 您应该

  • 安装oracle 19C后,它要求用户名和密码。输入什么,以及如何创建一个具有所有权限和身份验证权限的新用户。(注意,我试图通过登录SYSDBA创建用户命令,但它显示错误为无效的普通用户或角色名.在这里输入图像描述 [在此处输入图像描述][2]

  • 问题内容: 我只想在Expect脚本中执行以下bash命令: 我添加到开始但它不起作用。我认为“ <”符号意味不到! 谁能帮我解决这个问题? 问题答案: 我现在找到了解决该问题的方法。我避免使用“ <”符号,因此我们可以改用以下命令:

  • 问题内容: 这听起来像是一个非常笼统的问题,但这是正确的。 我有一个要求,以创建我的应用程序配置脚本,将生成的这种配置的结果(基本,,)。我的问题是,我应该从哪里开始构建?有没有我可以效仿的例子? 问题答案: 要创建标准的“配置”脚本,您需要GNU autoconf。您可能还需要GNU automake和libtool。 有大量的文档和指导。谷歌搜索“ autoconf automake howt

  • 我在 Jenkins 中创建了一个管道作业,我需要创建一个管道脚本来显示开发阶段的失败和不稳定的构建。在 Jenkins 2.0 中创建此脚本的步骤是什么,或者是否有任何示例管道脚本