【问题标题】:Connect .NET Core Web API to MySQL on different docker container将 .NET Core Web API 连接到不同 docker 容器上的 MySQL
【发布时间】:2019-04-27 04:46:51
【问题描述】:

我有 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

project architecture image

我在 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: 对不起我的语法不好

【问题讨论】:

  • 您能提供您的docker run 命令和/或您的docker-compose.yml 文件吗?你用什么来运行你的容器。您将连接字符串指向本地主机,并且在容器中本地主机是容器,而不是运行容器的计算机。
  • 我将我的 localhost 更改为 vm ip 地址,它的工作:) thks

标签: mysql .net docker .net-core asp.net-core-webapi


【解决方案1】:

感谢@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>

【讨论】:

    【解决方案2】:

    对于从web api 连接到mysql,您可以添加Compose,这将为web apimysql 创建一个共享网络,然后您可以使用service container name 访问mysql

    version: "3"
      services:
       web:
        build: .
        ports:
          - "8000:8000"
       db:
        image: postgres
        ports:
         - "8001:5432"
    

    您可以通过postgres://db:5432 访问db,请参阅Networking in Compose

    对于另一种选择,您可以创建自己的Bridge networks 以在两个容器之间共享网络。参考Bridge networks

    【讨论】:

    • 我从未使用过 docker-compose,所以我使用 --link 将 web api 容器连接到 mysql 容器。我稍后会尝试 docker-compose :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 2020-12-11
    • 2020-11-04
    • 2021-05-26
    • 2021-12-03
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多