【问题标题】:How to run psql commands in a postgres docker container handled by docker-compose?如何在 docker-compose 处理的 postgres docker 容器中运行 psql 命令?
【发布时间】:2018-04-27 14:00:21
【问题描述】:

这个问题和这个有关:Docker - How can run the psql command in the postgres container?

但上面提供的解决方案仅在您手动执行操作时才有效,而这里希望使用 docker-compose 自动执行操作。

所以这个 docker 容器可以工作:

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

但是这个 docker 容器失败了:

FROM postgres
RUN psql -U postgres -c "CREATE USER user WITH PASSWORD 'pass';"

因为在执行 RUN 时,postgresql 服务器还尚未启动!

有没有办法克服这个限制?

【问题讨论】:

  • 是的,但是您必须添加在容器启动时启动的脚本(而不是最后一个 CMD ["postgres"] 命令),并且此脚本将运行 psql 命令并以“exec postgres”结尾。
  • @JosMac 我不明白你的意思。您所指的最后一个CMD["postgres"] 命令是自动调用的吗?并插入exec postgreswhere?...一个例子会有所帮助
  • @GeorgiosPligoropoulos 您是否检查过这里的问题是否符合您的需求? How to create User/Database in script for Docker Postgres
  • @tgogos 恐怕这没有帮助,因为有关于如何手动执行事物的说明,而显然这里需要的是让事物在 docker 中运行。归根结底,我们应该从命令行运行的只是docker-compose up -d。并且所有步骤,创建数据库等都应该自动运行。希望这能提供更清晰的画面
  • 您可以查看此说明:stackoverflow.com/questions/43974888/…

标签: postgresql docker docker-compose dockerfile


【解决方案1】:

当您将带有脚本的文件夹挂载到位于/docker-entrypoint-initdb.d/ 的 docker 容器时,您可以在 posgres 中运行一些脚本,请参阅挂载文件夹 sql 的 docker-compose.yml。 postgres 图像很棒,每次 postgres 启动时都会运行脚本...

version: '3.6'

services:  
  my_db:
    image: postgres:alpine
    volumes: ["/somepath/sql/:/docker-entrypoint-initdb.d/"]

/somepath/的文件结构

- docker-compose.yml
- sql
  - new_extension.sql

cat sql/new_extension.sql

/* create extension for cureent DB */
CREATE EXTENSION IF NOT EXISTS citext;
/* create extension over the template1 so all created databases after that also have the extension */
\c template1
CREATE EXTENSION IF NOT EXISTS citext;

【讨论】:

  • 恐怕我已经尝试过了,但我会告诉你问题出在哪里。我知道使用psql .... 将数据库备份恢复到特定 数据库名称的命令,但我找不到如何使用postgresql 中的SQL 语句设置当前工作数据库(例如MySQL 有USE 关键字)。这就是为什么我们发现自己处于上述情况。但如果你知道请分享:)
  • 我更新了我的答案,如果你切换到 template1,那么之后创建的所有 db 也将具有扩展名......我不明白你想在这里实现什么,你能发布你的 .sql 吗?
  • 相关问题也给出了这个问题的背景:stackoverflow.com/questions/50080850/…
  • 干得好。这是一个完美的解决方案。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多