docker - 如何从 Dockerfile 中的上一个目录复制内容
问题描述
下面以dotnet应用代码为例
我有一个应用程序代码
D:\eshop\DotneteShopOnWeb\src\Web\Application.sln
我在“Application.sln”中有多个项目,例如 Web、API、Test
每个项目都有自己的 Dockerfile
D:\eshop\DotneteShopOnWeb\src\Web>Dockerfile
Dockerfile如下
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS build
WORKDIR /app
COPY *.sln .
COPY . .
WORKDIR /app/src/Web
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS runtime
WORKDIR /app
COPY --from=build /app/src/Web/out ./
ENV ASPNETCORE_ENVIRONMENT Development
ENTRYPOINT ["dotnet", "Web.dll"]
我正在执行docker build
命令 Dockerfile 位置。
我也尝试docker build -t dotnetcore-eshop-mvc-manual -f src/Web/Dockerfile .
过D:\eshop\DotneteShopOnWeb>
我收到错误,RUN dotnet restore
因为 sln 文件没有被复制到工作目录中。
请让我知道COPY
从上一个目录复制内容需要进行哪些修改。
解决方案
您正在恢复之前更改工作目录。我的意思是您的 .sln 文件位于路径 /app 中,但您的恢复是在 /app/src/Web 位置内执行的。你应该做这样的事情来复制 .sln 文件。
COPY *.sln .
COPY . .
WORKDIR /app/src/Web
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS runtime
WORKDIR /app
COPY --from=build /app/src/Web/out ./
ENV ASPNETCORE_ENVIRONMENT Development
ENTRYPOINT ["dotnet", "Web.dll"]
推荐阅读
- javascript - 在用作另一个函数中的回调函数之前,函数不会完全初始化
- apache-kafka - 使用 Java 查找 Kafka 主题中的消息数
- java - 带有@Transactional 的EntityManager persist() 不会抛出DataIntegrityViolationException
- sql - 如何在遍历 300M + 记录并将该信息插入另一个表时获取每天的第一条和最后一条记录的 PKId?
- java - 获取异常是否为 instanceof 而不使用 instanceof 的复杂方法
- c++ - 如何使用 C++ 将数组按字母顺序排序到新数组中?
- python - For 循环只取列表中的最后一个元素
- sql - 如何修复sql中select语句中的子查询
- symfony - 缺少控制台命令参数时显示问题
- reactjs - 如何从组件 B(功能组件)中的事件处理程序呈现组件 A?