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

我一直在search这一两天,我不能得到一个解决scheme。

我正在使用Docker工具使用.NET Core 1.1和VS2017。 当我使用自托pipe选项或IIS运行应用程序时,一切正常。 我使用Ngpsql作为PostgreSQL的数据提供者,这个工作很好。 当我运行该应用程序作为容器与Docker(图像生成很好,容器运行在Windows和Linux),因为我的Postgres主机是本地主机和核心应用程序无法看到我的本地PostgreSQL实例(因为容器本地主机是容器本身,而不是我的主机)。 我知道有很多的教程和演练用.NET Core和PSQL通过Docker Compose(每个容器)来做到这一点,我知道这一点。 我假设他们工作的很好,但是这项工作的要求是,容器化的核心应用程序从本地安装的PostgreSQL服务器读取/写入数据。

在生产中,核心容器和当地安装的PostgreSQL将在同一台机器上具有相同的地址。 我知道这必须是一个简单的参数或类似的东西,但我不想丢失在连接string我的(发展)机器ip的Docker容器的可移植性,因为生产服务器中的部署/运行scheme将通过Docker Cloud和东西自动化。

也许传递一个参数? 正确揭露docker集装箱港口? 什么? WHAAAT?

您可以将此代码添加到您的entrypoint

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

该脚本从容器中获取网关IP地址。 由于您的容器(可能)通过主机访问互联网,网关IP将成为主机和容器共享的任何networking上的主机IP。 然后在容器主机文件中添加一个条目,以便脚本可以通过名称引用主机IP(在这种情况下,任意“dockerhost”)。

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

来源: Reddit 。 欲了解更多信息请点击这里