【问题标题】:Parameterizing docker exec psql -c commands参数化 docker exec psql -c 命令
【发布时间】:2020-03-24 12:44:51
【问题描述】:

我有这个脚本,其中包含一些命令,例如:

sudo docker exec $container psql -U postgres -c "CREATE DATABASE $gisdb ;"

$container 参数没有问题,但我无法在CREATE DATABASE 命令中使用$gisdb 参数读取正确的值。是否有可能以其他方式或我需要重新设计此命令或使用硬编码值?

【问题讨论】:

  • $gisdb 变量分配了什么值?命令是否失败?如果不是,数据库是用什么名称创建的?
  • 最好不要对值进行硬编码。在脚本中,在 sudo 行之前,您可以将变量转储到您的某个日志文件中,例如 date >>yourlogfile ; env >>yourlogfile 并审查它们。
  • 在这种特定情况下,名称也是 gisdb,但我想参数化脚本,所以我只需要在运行新的或其他目的时更改脚本顶部的参数值(当然是 postgresql 明智的) ....

标签: docker parameter-passing psql


【解决方案1】:

数据库名称

根据PostgreSQL Documentation,创建数据库需要数据库名称

CREATE DATABASE _name_

因此,您的代码中的$gisdb - 是创建的数据库的名称。 您可能会硬编码这个名称,但您应该确切知道 - 哪个 名称是您硬编码的。

因为一般情况下,其他服务依赖于数据库名称。 因此,请查看您的代码手册。

摆脱sudo

您可以在docker 命令之前省略sudo。 只需将当前用户添加到docker 组:

usermod -aG docker $USER

然后,登录后,您将能够在没有sudo 的情况下运行docker

【讨论】:

  • 感谢“摆脱 sudo”的提示。正如我对您帖子第一部分的理解,这个创建数据库命令不允许参数化值作为输入?
猜你喜欢
  • 2016-04-02
  • 2018-10-17
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 2018-10-16
相关资源
最近更新 更多