将容器化的.NET Core MVC / WebAPI应用程序连接到LOCALLY安装的Postgres

时间:2017-07-26 02:57:13

标签: postgresql docker asp.net-core devops

我已经搜索了几天而无法获得解决方案。

我使用.NET Core 1.1和VS2017与Docker Tools。当我使用自托管选项或IIS运行应用程序时,一切正常。我使用Ngpsql作为PostgreSQL的数据提供程序,这个东西效果很好。当我将应用程序作为带有Docker的容器运行时(图像构建很好,容器在Windows和Linux中运行),因为我的Postgres主机是 localhost 和Core应用程序无法看到我的本地PostgreSQL实例(因为容器 localhost 是容器本身而不是我的主机)。我知道有很多很多的教程和演练通过Docker Compose(每个的容器)使用.NET Core和PSQL来实现这一点,我知道。我认为它们工作得很好但是这个工作的要求是去容器化的核心应用程序从本地安装的PostgreSQL服务器读取/写入数据。

在生产中,Core Container和LOCALLY安装的PostgreSQL将在同一台机器上使用相同的地址。我知道这必须是一个简单的参数或类似的东西,但我不想通过使用连接字符串我的(开发)机器ip来丢失Docker容器的可移植性,因为生产服务器中的部署/运行场景将通过Docker Cloud和东西实现自动化。

也许传递一个参数?正确暴露码头集装箱港口?什么? WHAAAT?!

1 个答案:

答案 0 :(得分:0)

您可以将此代码添加到entrypoint

echo $(netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}') dockerhost >> /etc/hosts

脚本从容器内部获取网关IP地址。因为您的容器(可能)通过主机访问互联网,所以网关IP将是主机和容器共享的任何网络上的主机IP。然后它在容器主机文件中附加一个条目,这样你的脚本就可以按名称引用主机IP(在这种情况下任意'dockerhost')。

在入口点运行脚本,即使您在具有略微不同的网络配置的docker主机上部署映像,也可以获得正确的IP地址,因为在容器运行时设置了hosts条目,而不是在映像是建

来源:Reddit。有关详细信息,请参阅here