Asp.net .NET ASP核心Docker容器中的Sqlite数据库为空
我试图将.NET ASP核心web应用程序包装到Docker容器中,但容器中的Sqlite数据库似乎是空的 在控制器中,我执行以下查询:Asp.net .NET ASP核心Docker容器中的Sqlite数据库为空,asp.net,sqlite,docker,Asp.net,Sqlite,Docker,我试图将.NET ASP核心web应用程序包装到Docker容器中,但容器中的Sqlite数据库似乎是空的 在控制器中,我执行以下查询: using (var connection = new SQLiteConnection(_connectionString)) { connection.Open(); using (var cmd = new SQLiteCommand("SELECT COUNT(*) FROM sqlite_master WHERE type='tabl
using (var connection = new SQLiteConnection(_connectionString))
{
connection.Open();
using (var cmd = new SQLiteCommand("SELECT COUNT(*) FROM sqlite_master WHERE type='table';", connection))
{
result = (Int64)cmd.ExecuteScalar();
}
}
其中,\u connectionString
定义如下:
private static readonly string _database = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "LocalDb\\v1\\sqlitedb.db");
Dockerfile:
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "MyApp.dll"]
我使用docker build-t MyApp:dev.
构建,并使用docker run-p8080:80-e“ASPNETCORE\u ENVIRONMENT=Development”MyApp:dev运行
当我在Visual Studio中使用IIS运行应用程序时,我得到了预期的表数,但在docker中它返回0。另外,当我查询一个表时,我得到一个SQLiteException:SQL逻辑错误没有这样的表错误
当我SSH到容器中时,我可以看到数据库文件在我期望的地方:在app/LocalDb/v1/
有什么问题的线索吗?找到了问题。该容器基于Linux,无法识别带有反斜杠的.db
文件的文件路径。出于某种原因,它创建了一个名为LocalDb\v1\sqlitedb.db
的新文件(不是目录,而是具有该名称的实际文件)。将路径更改为正向斜杠解决了此问题。在哪里初始化数据库内容。看起来您没有将预填充的数据库复制到容器中。@SteveBoyd.db
文件包含所有内容。这纯粹是为了查找,并且在编写web应用程序之前已预先填充。您好,请告诉我如何更改路径?我需要替换什么?options.UseSqlite(@“Data Source=./Data/blogging.db”)
@User12351259599491,在我的c代码中,我更改了以下行private static readonly string\u database=System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),“LocalDb\\v1\\sqlitedb.db”)代码>改为使用正斜杠。