mysql - 将 .NET Core Web API 连接到不同 docker 容器上的 MySQL
问题描述
我有 2 个 docker 容器在同一虚拟机上运行(VMWare 工作站 12 Player 上的 Ubuntu 服务器 18.04)。第一个是 MySql Container,它在端口 3306 上运行,第二个是 asp.net core (v2.0) web api(vm 上的端口 5000 并通过端口 80 通过 nginx 导出到外部)。我的虚拟机 api 是 192.168.20.197
我在 web api 项目上的连接字符串是:optionsBuilder.UseMySQL("server=localhost;port=3306;database=mydatabase;user=root;CharSet=utf8");
我的 docker 文件内容是
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "DemoMySql.dll"]
我尝试向 VM 上的 web api 发出 HTTP 请求,但是当我尝试与数据库交互时服务器响应错误(500)(当我让它返回示例字符串时,web api 仍然正常工作,例如 192.168.20.197 /api/values/samplestring)。那么如何将 web api 连接到不同容器上的 mysql 呢?
p/s: 对不起我的语法不好
解决方案
感谢@Tao Zhou 和@Nathan Werry 的建议,我通过将连接字符串中的localhost 替换为我的虚拟机的IP 地址解决了这个问题。然后我使用 docker --link 标签(docker 的遗留功能)将 mysql 容器链接到 web api 容器。
docker run \
--name <webapi-container-name> \
-p 8082:8081 \
--link <mysql-container-name>:<mysql-image> \
-d <webapi-image>
推荐阅读
- python - Flask 未报告模板中的 url_for 错误并卡住
- macos - 为什么 Google 公共 DNS 让您为 DNS-over-TLS 设置代理服务器以在 Mac OS 上运行?
- c# - Startup.cs 中的这个 C# HttpContext 上下文来自哪里?
- python - 循环pycountry转换
- python - Python数据框删除前n行并剩余移动
- ruby-on-rails - Mongoid 从文档中的数组返回特定对象
- javascript - 在 ajax 函数中使用“onClick()”函数,同时继续使用其成功数据?
- batch-file - 如何通过 Jenkinsfile 在批处理中使用变量执行 Git 命令
- python - ArrayField 最大尺寸?
- c# - 带有自定义参数的 C# 事件 - 如何使用 C++ 实现类似的功能?