将PostgreSQL安装到asp.net核心容器中

时间:2017-03-07 11:41:38

标签: postgresql asp.net-web-api docker asp.net-core

我是Docker世界的初学者。我已经创建了一个 ASP.net Core Web API,并使用 PostgreSQL 在localhost上成功运行。 现在,我已将WebAPI添加到Docker容器中。我使用的是Windows 10,Visual Studio 2015,Docker for Windows 10和Powershell。现在的问题是,我无法弄清楚以下内容。

  1. 如何在我的容器中设置PostgreSQL?
  2. 如何创建数据库和表格?
  3. 如何将上述数据库与WebAPI连接?
  4. 当我尝试调用API时,它会出现" Connection refused" 错误。数据库连接失败。我相信它是因为容器内没有DB。我无法找到适合初学者理解这个程序的方法。任何有关步骤的帮助都会非常有用。

1 个答案:

答案 0 :(得分:4)

您希望在单独的容器中运行每个应用程序,否则您最终会遇到与之前相同的应用程序。

但是你必须使用网络将容器连接在一起。

这样做的步骤:

  1. 创建一个名称为bridge-network:docker network create bride-network
  2. 的桥接网络
  3. 使用postgres数据库运行名为postgres的容器。确保将其添加到网络:--network bridge-network
  4. 添加您的应用广告泊坞窗容器:还可以使用--network bridge-network
  5. 将其添加到此网络

    现在,您的应用程序可以使用主机名http://postgres(基本上为http://[container-name])到达postgres数据库。

    要在1中执行此操作,您可以创建docker-compose.yml文件并运行docker-compose -f yourfile.yml up一次创建所有内容

    为什么拆分容器

    docker的想法是1个容器运行1个应用程序。当此过程停止时,docker知道容器已停止/死亡。如果您在1个容器中添加多个应用程序,则docker将无法知道。也可能是应用程序产生问题,例如:如果两个应用程序都注册收听相同的端口会怎么样?

    另一个问题是你想扩大规模:创建重复的容器。那么你想用你的应用程序扩展数据库1 = 1吗?那么你的唯一真相来源是哪里?

    所以你每个容器拆分1个应用程序:

    • 每个应用都在自己的沙箱中运行,并且不会受到任何其他应用/容器的伤害/通信,只能通过http / udp。
    • 您可以逐个(水平)单独缩放它们。
    • 您可以通过环境变量单独配置它们。