在Docker中运行ASP.Net Core应用程序和MySql服务时,它们不在同一网络中,因此无法直接访问。解决方法是将它们连接到同一个网络中。在docker-compose.yml文件中,可以使用以下内容创建一个网络:
version: '3'
services:
web:
build:
context: ./WebApplication
dockerfile: Dockerfile
ports:
- "8000:80"
depends_on:
- db
networks:
- mynetwork
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_password
networks:
- mynetwork
networks:
mynetwork:
driver: bridge
然后,可以在ASP.Net Core应用程序的appsettings.json文件中使用以下代码配置数据库连接字符串:
{
"ConnectionStrings": {
"DefaultConnection": "server=db;port=3306;database=mydb;user=root;password=your_password"
}
}
请注意,在连接字符串中,使用了“db”作为数据库服务器的名称,这是由docker-compose.yml文件中定义的容器名称。您还可以根据需要使用其他名称。
最后,确保在应用程序Dockerfile中安装MySql.Data.EntityFrameworkCore包。
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication.csproj", ""]
RUN dotnet restore "./WebApplication.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "WebApplication.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApplication.csproj" -c Release -o /app/publish
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS final
WORKDIR /app
COPY --from=publish /app/publish .
RUN apt-get update && apt-get install -y unzip
RUN curl -O https://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-8.0.22-noinstall.zip && \
unzip mysql-connector-net-8.0.22-noinstall.zip && \
cp mysql-connector-net-8.0.22/*.dll . && \
rm -rf mysql-connector-net-8.0.22 && \
rm mysql-connector-net-8.0.22-noinstall.zip
ENTRYPOINT ["dotnet", "WebApplication.dll"]
现在重启应用程序和MySql容器,应该可以成功连接到数据库。