我有一个简单的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命令传递命令失败有关。可能与'
有关。
答案 0 :(得分:2)
您要用-c
而不是-e
。
-e
打开“回显查询”
-c
运行命令并退出
您是否考虑过仅将create role
命令放在名为create_role.sql
的文件中并将其复制到/docker-entrypoint-initdb.d/
中?
基于测试,似乎等效但更简单的解决方案是将SQL命令作为一行放在文件00_roles.sql
中,然后将其复制到容器中,而不是复制到init.sh
脚本中。