我向Dot.NET核心应用程序添加了docker支持,这就是我得到的
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["SMSys.csproj", ""]
COPY ["../DataLayer/DataLayer.csproj", "../DataLayer/"]
COPY ["../Utilities/Utilities.csproj", "../Utilities/"]
COPY ["../ServiceLayer/ServiceLayer.csproj", "../ServiceLayer/"]
RUN dotnet restore "./SMSys.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "SMSys.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "SMSys.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SMSys.dll"]
我的docker文件在'smsys.csproj'所在的位置。
如果我在该目录中运行docker,我会得到:
COPY failed: forbidden path outside the build context:
如果我在执行copy命令后更改项目的一些引用,并从我所有项目所在的目录外部运行docker,那么我将得到与我的解决方案相关的上千个错误。错误与丢失的东西(程序集和包)有关,好像所有的项目都彼此忽略了,而实际上它们应该彼此很好地引用,就像我通过visual Studio启动项目时所做的那样。
FROM mcr.microsoft.com/dotnet/aspnet:5.0.3-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0.103-buster-slim AS build
WORKDIR /src
# Prevent 'Warning: apt-key output should not be parsed (stdout is not a terminal)'
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1
# install NodeJS 13.x
# see https://github.com/nodesource/distributions/blob/master/README.md#deb
RUN apt-get update -y
RUN apt-get upgrade -y
RUN apt-get install -y mc
#RUN apt-get install curl gnupg -yq
#RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get install -y npm
COPY ["SMSysSolution/SMSys.csproj", "SMSysSolution/"]
COPY ["DataLayer/DataLayer.csproj", "DataLayer/"]
COPY ["Utilities/Utilities.csproj", "Utilities/"]
COPY ["ServiceLayer/ServiceLayer.csproj", "ServiceLayer/"]
COPY ["XUnitIntegrationTests/XUnitIntegrationTests.csproj", "XUnitIntegrationTests/"]
COPY ["XUnitTestProject1/XUnitTestProject1.csproj", "XUnitTestProject1/"]
RUN dotnet restore "./SMSysSolution/SMSys.csproj"
COPY . .
WORKDIR "/src/SMSysSolution"
RUN dotnet build "SMSys.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "SMSys.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SMSys.dll"]
我必须对路径做一些改动才能使它正常工作。
DockerFile
请注意您的复制
说明。第一个位置是您的物理位置,而另一个是容器内的位置。显然,您正在尝试创建这样的树:
| src
| SMSys.csproj
| DataLayer
| ...
| Utilities
| ...
| ...
我不确定这是不是你想要的...
FROM mcr.microsoft.com/dotnet/aspnet:5.0.3-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0.103-buster-slim AS build
WORKDIR /src
COPY ["{FOLDER OF THE SMSys.csproj}/SMSys.csproj", "{MATCHING FOLDER OF THE SMSys.csproj}/"]
COPY ["DataLayer/DataLayer.csproj", "DataLayer/"]
COPY ["Utilities/Utilities.csproj", "Utilities/"]
COPY ["ServiceLayer/ServiceLayer.csproj", "ServiceLayer/"]
RUN dotnet restore "./SMSys.csproj"
COPY . .
WORKDIR "/src/{FOLDER OF THE SMSys.csproj}"
RUN dotnet build "SMSys.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "SMSys.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SMSys.dll"]
| src
| {FOLDER OF THE SMSys.csproj}
| SMSys.csproj
| DataLayer
| ...
| Utilities
| ...
| ...
| docker-compose.yaml
| {FOLDER OF THE SMSys.csproj}
| DataLayer
| Utilities
| ...
然后,在文件内部:
services:
smsys-app:
ports:
- "..." # ports of the services
build:
context: .
dockerfile: {FOLDER OF THE SMSys.csproj}/Dockerfile
这是假设您将DockerFile
保持在smsys.csproj
的同一级别,但您可以将其放在另一个位置:)
问题内容: 当您有一个用于数据库的Dockerfile,一个用于应用程序服务器的Dockerfile等时,如何组织属于项目的Dockerfile?您是否在源代码中创建了某种层次结构?一个大型企业项目不能仅由一个Dockerfile组成吗? 问题答案: 这个答案已经过时了。无花果不再存在,已经被Dockercompose取代。
我已经安装并配置了SonarQube 3.7.1和sonar runner 2.3。 在尝试用c#解决方案运行sonar runner时,我遇到了一个错误: 我的声纳项目。房产看起来像 我想排除项目MPA. Build。但它不工作。 在MPA。sln将MPA归档。构建项目定义为 项目(“{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}”)=“MPA.Build”、“MP
问题内容: 我正在尝试创建由4个项目组成的ASP.NET 5解决方案的映像。结构如下: FlashTools(ASP.NET 5类库) 模型(ASP.NET 5类库) QuizzCorrector(ASP.NET 5 Web应用程序) QuizzService(ASP.NET 5类库) 我有一个简单的Dockerfile,看起来像这样: 但不确定放在哪里。在我的解决方案的根文件夹中global.j
我看过这个答案: 编辑。csproj文件并更正解决方案文件夹(包含packages文件夹)的相对路径为我解决了这个问题。 但是我不知道该编辑什么。 我正在Visual Studio 2013中制作一个C项目。我有一个包含三个项目的解决方案。其中一个项目需要Nuget包。 我在我的解决方案上使用Manage NuGet软件包来安装NuGet包。从那里我选择了一个需要这个包的项目。我还使用了Enabl
PROJECT_B中的docker-compose.yml如下所示: 每个项目都可以单独运行,工作良好。但是,如果我们想要更改PROJECT_A和PROJECT_B之间的api,我们需要运行这两个项目,并将它们链接在一起以测试我们的代码。现在我们想写一个开发工具包项目,可以运行这两个项目,并链接他们,如果需要。最好的方法是什么?
本文向大家介绍docker运行项目的方法,包括了docker运行项目的方法的使用技巧和注意事项,需要的朋友参考一下 1、进入存放自己项目war的目录 编辑Dockerfile文件 内容如下: 2、build自己的镜像 不出意外的会显示build镜像的步骤,最后一行为 最后的字符串是镜像id的一部分。 此时可以运行docker images查看自己的镜像信息 3、运行自己的docker容器 这里 -