【发布时间】:2019-03-11 14:49:47
【问题描述】:
我知道这是一个菜鸟问题,但我无法理解如何让我的 .Net Core 网站连接到我的 MySql 容器。因此,一些背景知识,MySql 和 .Net 核心网站都在各自的容器中。我已经启动了 MySql 容器并设置了 root 帐户来工作。我在 .Net Core 项目中使用实体框架。
我使用以下语句创建了 MySql 容器:
docker run --name mysql_container -d -p 3306:3306
下面是 Visual Studio 为我生成的 dockerfile。
如果 IP 可以更改,我应该告诉我的 .Net Core 程序是 MySql 容器的 IP 地址吗?
.Net Core 程序内部:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var connection = $"Server={GetDBAddress()};Database=myDataBase;Uid=root;Pwd=root;";
services.AddDbContext<ToDoContext>(options => options.UseMySQL(connection));
}
如果我编写 GetDBAddress 函数,里面有什么?我不能简单地返回 localhost 因为它是另一个 docker 容器?截至目前,我正在尝试使用 localhost,但连接被拒绝。但我可以使用工作台连接到 MySql 数据库。
我也不确定,但这两个设置是否可以组合成一些文件,我认为它们可能被称为 docker-compose 文件?
Dockerfile
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY ["ToDoService/ToDoService.csproj", "ToDoService/"]
RUN dotnet restore "ToDoService/ToDoService.csproj"
COPY . .
WORKDIR "/src/ToDoService"
RUN dotnet build "ToDoService.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "ToDoService.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ToDoService.dll"]
【问题讨论】:
-
这两个容器是否在同一台机器上运行?你在使用 docker-compose 吗?因为在第一种情况下,您可以引用 localhost,但是您必须公开正确的端口才能使容器可以从外部访问
-
容器与 linux 容器在同一台机器上运行。我刚刚使用它设置的 MySql 容器。
docker run --name mysql_container -d -p 3306:3306那我用visual studio创建的dockerfile更新问题。
标签: c# mysql docker docker-networking