当前位置: 首页 > 知识库问答 >
问题:

如何将PostgreSQL卷附加到使用SBT native packager生成的Docker映像?

尤研
2023-03-14

我希望能够在一个pre-prod环境中部署我的应用程序,使用Docker卷进行集成测试,该卷将公开PostgreSQL实例。我正在使用Scala v2.12.8和Play v2.7。

查看SBT本机封装器的环境设置,似乎可以定义dockerExposedVolumes来连接DB。

使用普通的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答案。

我试图搜索配置示例,但到目前为止,我没有发现任何有用的东西。现在我想知道我应该如何定义一个新的docker卷,然后将其暴露到SBT创建的docker映像中?

最终版本。我已经对其进行了全面测试,它可以在TCP端口5433上公开DB。

# 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提供的命令检查日志文件。

共有1个答案

李新霁
2023-03-14

有一个sbt插件可以帮助您实现这一点:

sbt-docker-撰写

有了它,您可以将数据库添加到docker组合文件中,并且可以在sbt中运行所有内容。

这是Docker标准。以下是如何为博士后做这件事的解释:

[run_postgresql_docker_compose][2]

docker编写。yml来自该示例:

version: '3'
services:
mydb:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
ports:
         - 5432:5432/tc

volumes:
db-data:
driver: local

由于这是Docker的标准方式,您将找到更多示例。

 类似资料:
  • 我使用命令在我的macOS Big Sur上运行带有Ubuntu Xenial映像的docker容器,它工作正常,给我一个Linux的终端。 然而,我想将一个卷附加到我的容器中,这样我就可以将我在ubuntu终端中所做的工作保存在Mac文件系统的容器中。为此,我尝试运行以下命令: sudo docker run-it ubuntu:xenial-v/Users/myname/Documents/U

  • 问题内容: 我有一个简单的java项目,需要外部jar。我使用netbeans进行构建,在执行Clean and Build命令后,可以在dist目录中找到以下结构: 我会说典型的。 现在,我想将带有依赖库的myApp.jar分发为一个exe。这可能吗?我正在尝试使用Launch4J。在GUI中,我创建了配置文件, cp 部分中有一些选项 但它似乎是类路径,它是我可以引用的额外jar的唯一位置。

  • 我得到了 我觉得我错过了一些极其简单的东西,但我却无法完全弄明白。如有任何帮助,将不胜感激。

  • 问题内容: 我是Docker的新手,对使用该功能感到兴奋,但是有些事情我不了解。 如果我想使用两个仅数据容器,每个容器都导出名为的卷,如何防止卷路径冲突?使用创建绑定装载时,我可以映射卷名称。我该怎么做? 所以我想要的看起来像这样: 问题答案: 可以完成,但目前在Docker命令行界面中尚不支持。 如何 查找卷目录: 因此,您可以自动执行此操作,并将这些目录挂载到您选择的挂载点: 现在,通过真实目

  • 我创建了一个Docker容器,只需在Ubuntu上安装Docker并执行以下操作: 我立即开始安装Java和一些其他工具,花了一些时间与它,并停止了容器通过 然后我想增加一个卷,并意识到这并不像我想的那样简单。如果我使用,那么我最终会得到一个新的容器,因此我必须安装Java并执行之前已经执行的操作,只需要到达一个具有已装入卷的容器。 所有关于从主机装入文件夹的文档似乎都暗示装入卷是创建容器时可以完