当前位置: 首页 > 知识库问答 >
问题:

无法计算缓存密钥:“.csproj”未找到

谢胤
2023-03-14

我是Docker的新手。我使用ASP创建了一个Web API。Net内核使用Visual Studio 2019以及VS代码。它很好用。然后我添加了docker支持,并添加了带有默认值的Dockerfile。

当我尝试构建docker映像时,它在Visual Studio 2019和VS代码中都失败了。

但是,如果我尝试使用VisualStudio2019提供的选项运行Docker映像(我可以在其中选择Docker as run),则会创建映像。但是当我在VisualStudio2019或VS代码中运行build命令时。

docker build -f ./Dockerfile --force-rm -t mytestapp:dev ..
it throws following error<br>
 => ERROR [build 3/7] COPY [myTestApp.csproj, ./]  
Content of my docker file is given below
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80

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

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

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

项目结构图另附:

共有3个答案

水恩
2023-03-14

从解决方案根目录运行以下命令:

docker build-f[ProjectDir]\Dockerfile

姜智渊
2023-03-14

尝试从父文件夹运行该命令,可以使用-f标志指定Dockerfile的路径。

cd

docker build-t imagename:tag-f/ProjectDir/Dockerfile

Docker copy是。csproj和主机上当前位置的其他文件,因此如果您说:

COPY ["myTestApp.csproj", "./"]

确保您位于主机上的正确目录中。Docker Support创建的Dockerfile对于构建图像并不总是理想的,例如,如果您使用其他项目引用,它可以作为一个很好的基础。

谢昂雄
2023-03-14

简单的docker build命令无法使用Visual Studio创建的默认docker文件,因为路径是相对于解决方案的根而不是项目的根指定的。

您可以检查VS的生成输出,以确定其如何生成映像(简化版本):

docker build 
  -f "PROJECT_PATH\Dockerfile" 
  -t IMAGE_NAME:dev 
  "SOLUTION_PATH"

如您所见,它使用项目文件夹(-f)中的Dockerfile构建,但来自解决方案文件夹。

我猜他们这么做是因为它的优点是将每个Dockerfile保存在自己的项目文件夹中,同时允许您使用更一致的基于解决方案的路径引用该文件夹之外的资源。除此之外,这还挺烦人的。

您可以将Dockefile移动到解决方案文件夹并保持不变,但是VS中的Docker功能将按预期停止工作。或者您可以采用VS约定并相应地调整您的脚本。

 类似资料:
  • 我有下面的项目结构 我在中有一个目录名为。 我的Dockerfile如下: 在我运行下面的命令从这个docker文件构建图像之后 我得到了下面的错误 我的问题是为什么我有这个错误?以及如何解决它? 我在Windows 10 20H2 19042.964上使用了 我看到Docker-未能计算缓存密钥:未找到-在Visual Studio和一些内部链接中运行良好,但没有找到任何有用的东西。 我正在处理

  • 我已经生成了一个带有视觉效果的Dockerfile 当我将复制更改为它确实在继续,然后我得到: 我做错了什么?我将DockerLinux更改为Windows,更改了WSL,并重新启动了一切。 Dockerfile客户端

  • 我有一个Spring应用程序,它使用MyBatis进行持久化。我使用ehcache是因为速度对于这个应用程序很重要。我已经设置并配置了MyBatis和Ehcache。我使用一个名为“mybatis”的单一缓存,因为否则为每个实体创建单独的缓存将是荒谬的。 这是我的电子缓存。xml。 这是我的mybatis映射器界面的一个示例。 因为我有一个共享缓存,所以我需要一种方法使我的密钥对域对象是唯一的。作

  • 问题内容: 我在使用注释的缓存键在Spring中发生冲突时遇到问题。例如,使用以下两种方法: 这是我的缓存配置,其中添加了一个和一个bean: 由于某种原因,缓存键始终设置为方法中的参数,而不是方法的结果,从而导致两个方法返回相同的缓存结果。 我知道我可以在每个注释上手动指定键,但是对于我想要缓存的每种方法来说,这似乎有点扩展。 编辑 我注意到,将注释内的选项设置为我的bean的名称可以解决此问题

  • 我在经营一个Kafka制作人。我已经在yml文件中配置了密钥库位置,并在eclipse中运行时获取了它。但是当代码作为jar运行时,它无法找到密钥库位置。如何解决这个问题。 这是我的yml档案。 我得到以下错误: JAVA木卫一。FileNotFoundException:类路径资源[es-cert.jks]无法解析为绝对文件路径,因为它不位于文件系统:jar:file:/u01/home/app

  • 别名s1as被上述命令中使用的别名所取代,即server-alias(在下,上的SSL选项卡)。 jks和cacerts.jks存储在下。 下的JVM选项,上的JVM选项选项卡,以下选项 GlassFish服务器不喜欢什么? 它只在使用别名重新生成这些文件keystore.jks和cacerts.jks时工作,但当使用不同的别名(证书昵称)时,它会失败,出现给定的异常。GlassFish似乎将这个