【发布时间】:2020-04-10 04:58:47
【问题描述】:
我想创建一个 tarball,其中包含一个空数据库(即一系列空表)和一个启动 Postgres 容器的 shell 脚本,该容器将连接到空数据库。最终产品是一个 .tar.gz,其中包含一个数据库副本、一个启动脚本和一个停止脚本。这一切都是为了在 macOS 中工作
为了创建数据库,我在笔记本电脑上本地启动了一个 Postgres 服务器,并创建了一个名为“postgres-15year”的数据库。在 CLI 中使用“DBeaver”数据库管理器和“psql”,我可以看到 dbase 已正确创建且正常运行。
然后我创建了以下脚本:
start.sh
#!/bin/bash
echo $(pwd)
docker run --rm --name payments-15years -e POSTGRES_PASSWORD=docker -d -p5432:5432 -v$(pwd)/postgres-15year/data:/var/lib/postgresql/data:delegated postgres:11.6
stop.sh
#!/bin/bash
docker stop payments-15years
echo "docker stop payments-15years"
然后我将所有这些都放在一个我想要压缩包的目录中。
因此,用户将接收到压缩包,解压缩并运行启动脚本,并能够连接到具有预定义结构和模式的数据库。这是我认为“我的 start.sh”脚本正在做的事情:
- 创建容器名称“payments-15years”
- 为通用用户('postgres')设置数据库密码
- 将数据库端口设置为 5432 并将其映射到本地服务器端口 5432(不确定是否有必要,但所有示例似乎都可以 它)
- 将 db 映射到容器的 var/lib 和“委托”而不是 到“缓存”以便更改持续存在
- 将 Postgres docker 映像指定为 11.6
我的挑战是在运行启动脚本 'docker ps' 后返回:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14d2cba6abe2 postgres:11.6 "docker-entrypoint.s…" 44 seconds ago Up 42 seconds 0.0.0.0:5432->5432/tcp payments-15years
但是当我这样做然后从 CLI 运行“psql”时:
docker exec -it payments-15years psql -U postgres
数据库('postgres-15year')未列出。
有人看出我的方法有什么问题吗?
注意:
- 我没有提供数据库,但它是带有架构的空表 已定义,以上所有脚本和图片应该足够了 重现问题。
- 我找到的最接近堆栈答案是 here,但它没有帮助。
【问题讨论】:
标签: postgresql docker