我知道这是一个这样的noob问题,但我很难理解如何让我的.net核心网站连接到我的mysql容器。因此,mysql和.net核心网站都在各自的容器中。我已经启动了mysql容器并设置了根帐户。我在.net核心项目中使用实体框架。
我使用以下语句创建了mysql容器: docker run --name mysql_container -d -p 3306:3306
下面是visualstudio为我生成的dockerfile。
所以,如果ip可以更改,我应该告诉我的.net核心程序mysql容器的ip地址是什么?
.net核心程序内部:
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,但连接被拒绝了。但是我可以使用workbench连接到mysql数据库。
我也不确定,但这两个设置是否可以合并到某个文件中,我想它们可能被称为docker compose files?
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"]
1条答案
按热度按时间jtw3ybtb1#
如果您已经启动了mysql,并且暴露了端口,那么您应该能够通过连接来访问它
localhost
,带端口3306
. 否则,正如你所建议的,有可能建立一个docker-compose file
. 此文件通常包含应用程序运行所需的所有配置。因此,例如,适合您的应用程序的配置(注意:我假设您使用的是MySQL5.7,因为您还没有指定一个)可以是:要启动和部署应用程序,现在需要键入终端:
docker-compose up
这将启动您的部署。请注意,这里没有暴露任何端口:只有您的服务才能从中访问数据库db:3306
(您不需要通过ip引用,但可以使用服务名称访问其他服务)。出于调试目的,您仍然可以打开db端口,在下面添加这一行image
:请注意,此端口必须是免费的(没有其他系统服务使用它),否则整个部署将失败。
最后一点注意:由于docker compose会尽量避免在每次启动服务时构建图像,因此要强制它构建一个新的图像,您必须附加它
--build
到docker-compose up
命令。要搞垮你的部署就用
docker-compose down
. 要删除与部署相关的所有持久性数据(即从新数据库开始),请附加-v
上一个命令末尾的标志。希望有帮助!