【发布时间】:2019-11-12 20:53:02
【问题描述】:
我希望能够在 pre-prod 环境中部署我的应用程序,以便使用将公开 PostgreSQL 实例的 Docker 卷进行集成测试。我正在使用 Scala v2.12.8 和 Play v2.7。
查看 SBT 原生打包程序的 environment settings 似乎可以定义 dockerExposedVolumes 以附加数据库。
使用普通的 Docker 撰写文件,我会这样做:
version: "3"
services:
db:
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgress
- POSTGRES_DB=postgres
ports:
- "5433:5432"
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- suruse
volumes:
pgdata:
此配置取自SO answer。
我尝试搜索配置示例,但到目前为止我没有找到任何有用的东西。现在我想知道我应该如何定义一个新的 docker 卷,然后将它准确地暴露给 SBT 创建的 Docker 映像?
有效的解决方案
最终版本。我已经对其进行了全面测试,它可以在 TCP 端口 5433 上公开数据库。
# https://docs.docker.com/samples/library/postgres/
version: "3"
services:
app-pgsql:
image: postgres:9.6
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=yourPasswordHere
- POSTGRES_DB=yourDatabaseNameHere
- POSTGRES_INITDB_ARGS="--encoding=UTF8"
ports:
- "5433:5432"
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
driver: local
使用sbt dockerComposeUp -useStaticPorts 启动docker compose,然后使用docker ps -a 检查容器是否已实际暴露。此外,使用dockerComposeUp 或dockerComposeInstances 提供的命令检查日志文件。
【问题讨论】:
-
为什么不在自己的 docker 镜像中使用 postgres?
-
我想使用
sbt docker:publishLocal创建并附加一个数据库图像。那可行吗?否则,你能指出我正确的方向吗?我应该定义一个包含 PostgreSQL 映像的 docker compose 文件吗?
标签: scala docker playframework sbt sbt-native-packager