【问题标题】:Install PostgreSQL into a asp.net core container将 PostgreSQL 安装到 asp.net 核心容器中
【发布时间】:2017-07-27 14:36:34
【问题描述】:

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

  1. 如何在我的容器中设置 PostgreSQL?
  2. 如何创建数据库和表?
  3. 如何将上述DB与WebAPI连接起来?

当我尝试调用 API 时,它给出了 “连接被拒绝” 错误。数据库连接失败。我相信这是因为容器内没有数据库。我找不到让初学者理解这个过程的正确方法。任何有关步骤的帮助都会非常有帮助。

【问题讨论】:

  • 你可能不应该为 DB 使用容器
  • @4c74356b41 像这样评论是完全没用的。提及您认为更好的或您的建议。
  • 不是,它让你知道这可能会导致灾难
  • 我期待解决我的问题。不仅仅是一个想法。我什至没有从你的评论中得到任何想法。也许是因为我是 docker 的新手,我已经提前提到了。所以你应该注意。
  • 尤其是如果您是 docker 新手,您无法知道在 docker 中托管数据库是最佳实践,可以这样做,但我建议您不要这样做

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


【解决方案1】:

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

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

这样做的步骤:

  1. 创建一个桥接网络,名称为:bride-network:docker network create bride-network
  2. 运行名为postgres 的容器,其中包含postgres 数据库。确保将其添加到网络:--network bridge-network
  3. 添加您的应用程序广告 docker 容器:同时使用 --network bridge-network 将其添加到此网络

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

要一次性完成此操作,您可以创建一个 docker-compose.yml 文件并运行 docker-compose -f yourfile.yml up 以一次创建所有内容

为什么要拆分容器

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

另一个问题案例是当您想要扩大规模时:创建重复的容器。然后您是否还想使用您的应用程序扩展数据库 1=1?那么你的唯一真实来源在哪里?

因此,您为每个容器拆分了 1 个应用程序:

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

【讨论】:

  • tbh,这个答案非常没用,因为在容器中运行数据库是疯狂的
  • @4c74356b41 它一点用处都没有。即使您无法对其进行扩展(复制),您仍然可以将其作为原子应用程序运行并在同一集群中运行,从而减少网络延迟。
  • 那么有什么意义,你只能这样做,如果可以丢弃该数据库中的所有数据而不用担心它,否则你注定要失败
  • @4c74356b41 你从未听说过卷映射,这就是我们在 kubernetes/云环境中实现数据持久性的方式。
  • 我听说过,但是在容器中托管数据库是自找麻烦。
猜你喜欢
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2022-08-16
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
相关资源
最近更新 更多