docker postgres初始化脚本似乎无法创建db用户,命令被忽略

时间:2020-06-27 17:25:50

标签: postgresql docker

我有一个简单的dockerfile:

FROM postgres:latest

ENV POSTGRES_PASSWORD password
ENV POSTGRES_USER postgres
ENV POSTGRES_DB evesde


COPY init.sh /docker-entrypoint-initdb.d/

我的初始化文件是chmod'到777:

#!/bin/bash
psql -U "postgres" -d "evesde" -e "create role yaml with login encrypted password 'password';"

运行容器时,它会显示:

psql:警告:额外的命令行参数“使用创建角色yaml 登录加密的密码'password';“被忽略

我不确定为什么会这样,并且在进行交互式终端操作时,此命令似乎有效。我没有看到任何其他信息,也不确定出什么问题了。

postgres泊坞窗页面为:https://hub.docker.com/_/postgres

更深入地了解它时,我注意到在交互式终端中运行命令本身失败,并出现相同的错误,但是当我在postgres中时,命令运行:psql -U "postgres" -d "evesde"并运行命令,它可以工作。

我认为这可能与通过exec命令传递命令失败有关。可能与'有关。

1 个答案:

答案 0 :(得分:2)

您要用-c而不是-e

-e打开“回显查询”

-c运行命令并退出

您是否考虑过仅将create role命令放在名为create_role.sql的文件中并将其复制到/docker-entrypoint-initdb.d/中?

基于测试,似乎等效但更简单的解决方案是将SQL命令作为一行放在文件00_roles.sql中,然后将其复制到容器中,而不是复制到init.sh脚本中。