gpt4 book ai didi

postgresql - 使用一些数据初始化 PostgreSQL docker 容器的最佳实践

转载 作者:行者123 更新时间:2023-11-29 12:57:52 46 4
gpt4 key购买 nike

我创建了 docker 镜像,里面运行 PostgreSQL 并暴露 5432 端口。此图像内部不包含任何数据库。容器是一个空的 PostgreSQL 数据库服务器。

我想在(或期间)“docker run”命令中:

  • 附加数据库文件
  • 通过执行sql查询创建数据库
  • 从转储中恢复数据库

我不想在容器关闭后保留数据。它只是一个临时开发服务器。

我怀疑可以让我的“docker run”命令字符串非常短/简单。

可能可以在运行命令中使用 db/sql/dump 挂载一些外部文件夹,然后在容器初始化期间创建数据库。

完成此任务的最佳/推荐方法和最佳实践是什么?可能有人可以指出相应的 docker 示例。

最佳答案

这是一个很好的问题,可能其他人不止一次地问过自己。

根据 docker 指南,您不会在 RUN 命令中执行此操作。相反,您会在 Dockerfile 中为自己创建一个 ENTRYPOINT 或 CMD,它调用自定义 shell 脚本而不是直接调用 postgres 进程。在这种情况下,数据库将在“真实”文件系统中创建,但随后会在容器关闭期间被清理。

这将如何运作?容器将启动,像往常一样调用 ENTRYPOINT 或 CMD 并使用 init 脚本来填充 DB。然后在容器停止的那一刻,同一个脚本将收到一个信号并手动删除数据库内容。

CMD ["cleanAndRun.sh"]

取自 Docker 文档并根据您的需要进行修改的草图脚本“cleanAndRun.sh”。请记住,这只是草图,需要修改:

#!/bin/sh

# The script that is called in the trap must also stop the DB, so below call to
# dropdb is not enough, it just demonstrates how to call anything in the stop-container scenario!
trap "dropdb <params>" HUP INT QUIT TERM

# init your DB -every- time container starts
<init script to import to clean and import dump>

# start your postgres DB
postgres

echo "exited $0"

关于postgresql - 使用一些数据初始化 PostgreSQL docker 容器的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38433835/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com