无法使用 .Net API 从我的 Docker 容器访问 MySql 数据库

问题描述 投票:0回答:1

首先我想说我是新来的,如果我的问题不准确,我很抱歉。

Ubuntu 18.4 托管在 VPS 上, MySql-server 安装在我使用 API 运行 Docker 的同一系统上(不是 Docker)。

无法使用 .Net API 从我的 Docker 容器访问 MySql 数据库。

Dockerfile:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["CVMakerAPI/CVMakerAPI.csproj", "CVMakerAPI/"]
RUN dotnet restore "CVMakerAPI/CVMakerAPI.csproj"
COPY . .
WORKDIR "/src/CVMakerAPI"
RUN dotnet build "CVMakerAPI.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "CVMakerAPI.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "CVMakerAPI.dll"]

In ConnecitonString I'm using user that have access to this DB

When I try to do some request I'm getting:

如果需要更多信息,请询问。

mysql .net docker ubuntu
1个回答
0
投票

在容器内部,我们处于不同的网络空间。因此默认情况下我们无权访问主机网络中运行的任何内容。在本例中为 MySQL。

默认情况下,所有 docker 容器都使用

Bridge
网络模式。 https://docs.docker.com/network/

就 Docker 而言,桥接网络使用软件桥接器,允许连接到同一桥接网络的容器进行通信,同时提供与未连接到该桥接网络的容器的隔离。 Docker 桥接驱动程序会自动在主机中安装规则,以便不同桥接网络上的容器无法直接相互通信。

因此您的容器无法与主机网络上运行的 Mysql 通信。

要从容器访问主机网络,您可以在主机网络命名空间中运行容器。

docker run --network host <your container>

https://docs.docker.com/network/host/

© www.soinside.com 2019 - 2024. All rights reserved.