azure - 无法从同一台计算机上的 docker 容器连接到 Azure 存储模拟器
问题描述
我在 Visual Studio 2017 中成功对接了一个 .net core 2.2 web api 应用程序。该应用程序的一部分应该将一些数据存储到运行 VS 2017 的同一台机器上的 Azure 存储模拟器。模拟器的配置如下:
<services>
<service name="Blob" url="http://127.0.0.1:10000/"/>
<service name="Queue" url="http://127.0.0.1:10001/"/>
<service name="Table" url="http://127.0.0.1:10002/"/>
</services>
docker-compose.yml 文件具有以下网络定义:
build:
context: .
dockerfile: MyWebApi\Dockerfile
network: host
我可以在https://127.0.0.1:44315/api/values查看 web api 的输出
根据我的理解,“主机”网络配置通过将容器的主机 IP 地址分配给容器来完成它的工作,这到目前为止看起来不错。问题是为什么容器中的 dockerized Web 应用程序无法与模拟器通信,尽管有上述配置。这个练习缺少什么?
解决方案
据我记得,Azure Storage Emulator绑定在仅限本地的网络配置中,而Docker for Windows在使用Hyper-V的VM中运行。
恐怕解决方案是在开发时使用microsoft/azure-storage-emulator映像并将您的API指向它。
更新
您也可以尝试在连接字符串中使用host.docker.internal
而不是127.0.0.1
作为主机(这也可能让您使用在主机上运行的模拟器而不是容器)。
希望能帮助到你!
推荐阅读
- node.js - 如何修复 eslint 配置?
- php - 在 CodeIgniter 中使用 MySQL 查询时出现语法错误
- doctrine - 根据现有的 querybuilder 方法向 querybuilder 添加自定义方法的最佳实践是什么?
- algorithm - 我需要找到以下代码的时间复杂度吗?
- spring - 春季测试休息模板:无法提取响应:没有找到适合响应类型的 HttpMessageConverter
- javascript - 更改图像/svg 以在网页上正确显示横向或纵向
- swift - 触摸手势识别器可清除随机功能的屏幕
- postgresql - PostgreSQL:使用 2 级联接的 COUNT() 行且 ONLY_FULL_GROUP_BY 处于活动状态
- ruby-on-rails - 如何允许用户选择所有货币,但语言有限?
- c - 添加到 FLT_MAX 以导致溢出的最小数字