如何将 PostgreSQL 卷附加到使用 SBT 本机打包程序生成的 Docker 图像?
How to attach a PostgreSQL volume to a Docker image generated with SBT native packager?
我希望能够在 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:
此配置取自此 。
我尝试搜索配置示例,但到目前为止我没有找到任何有用的东西。现在我想知道 我应该如何定义一个新的 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 组合,然后使用 docker ps -a
检查容器是否实际暴露。此外,使用 dockerComposeUp
或 dockerComposeInstances
提供的命令检查日志文件。
有一个 sbt 插件 可以帮助您实现这一点:
有了它,你可以将你的数据库添加到一个 docker 组合文件中,你可以 运行 sbt 中的所有内容。
这是 Docker 标准。以下是如何为 Postgres 执行此操作的说明:
[run_postgresql_docker_compose][2]
该示例中的 docker-compose.yml
:
version: '3'
services:
mydb:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
ports:
- 5432:5432/tc
volumes:
db-data:
driver: local
因为这是 Docker 的标准方式,您会找到更多示例。
我希望能够在 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:
此配置取自此
我尝试搜索配置示例,但到目前为止我没有找到任何有用的东西。现在我想知道 我应该如何定义一个新的 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 组合,然后使用 docker ps -a
检查容器是否实际暴露。此外,使用 dockerComposeUp
或 dockerComposeInstances
提供的命令检查日志文件。
有一个 sbt 插件 可以帮助您实现这一点:
有了它,你可以将你的数据库添加到一个 docker 组合文件中,你可以 运行 sbt 中的所有内容。
这是 Docker 标准。以下是如何为 Postgres 执行此操作的说明:
[run_postgresql_docker_compose][2]
该示例中的 docker-compose.yml
:
version: '3'
services:
mydb:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
ports:
- 5432:5432/tc
volumes:
db-data:
driver: local
因为这是 Docker 的标准方式,您会找到更多示例。