Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有2个可执行项目的Dockerize.NET解决方案_Docker_Asp.net Core_Asp.net Web Api_Docker Compose_Dockerfile - Fatal编程技术网

带有2个可执行项目的Dockerize.NET解决方案

带有2个可执行项目的Dockerize.NET解决方案,docker,asp.net-core,asp.net-web-api,docker-compose,dockerfile,Docker,Asp.net Core,Asp.net Web Api,Docker Compose,Dockerfile,我被要求用一个web api和一个控制台程序创建一个.net解决方案,然后用一个docker compose命令提供这个解决方案,该命令包含完整的环境。web api使用mongodb和easynetq。控制台程序引用web api项目,并使用easynetq。我知道Visual Studio可以为每个项目提供dockerfile。在这之后我该怎么做?我是否在解决方案级别将2个DockerFile合并为1个?或者我可以继续使用2个dockerfiles吗 控制台程序的Dockerfile FRO

我被要求用一个web api和一个控制台程序创建一个.net解决方案,然后用一个docker compose命令提供这个解决方案,该命令包含完整的环境。web api使用mongodb和easynetq。控制台程序引用web api项目,并使用easynetq。我知道Visual Studio可以为每个项目提供dockerfile。在这之后我该怎么做?我是否在解决方案级别将2个DockerFile合并为1个?或者我可以继续使用2个dockerfiles吗

控制台程序的Dockerfile

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore "./ConsoleProgram.csproj"
RUN dotnet publish "ConsoleProgram.csproj" -c Release -o out
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "ConsoleProgram.dll"]
webapi的Dockerfile与上述相同,仅更改名称

解决方案级别的Docker compose

version: '3'

services:

mongo:
  image: mongo
  restart: always
  ports:
    - 27017:27017

webapi:
  build: ./webapi
  restart: always
  ports:
    - 5000:80
  environment:
    MongoDB__Host: mongo
  depends_on:
    - mongo

console:
  build: ./console
  restart: always
  depends_on:
    - webapi
在此基础上进行docker撰写后,我发现以下错误:

正在跳过项目“C:\WebApi\WebApi.csproj”,因为找不到该项目。 引用的项目“..\WebApi\WebApi.csproj”不存在。 无法生成服务“控制台”:命令“cmd/S/C dotnet” publish“Console.csproj”-c Release-o out”返回一个非零代码: 一,


你走对了路。每个项目都应该有Dockerfile(在项目文件夹的根目录中),然后是一个docker-compose.yaml文件和多个docker-compose.override.yaml文件(如果需要)

Dockerfile中存在一些漏洞

1.不要复制
复制/控制台程序映像中的所有文件,首先只需复制csproj

COPY console/ConsoleProgram.csproj console/
2.复制csproj文件后,运行
dotnet restore
,以缩短映像构建时间

RUN dotnet restore console/ConsoleProgram.csproj
3.然后复制所有其他文件并运行
dotnet publish
(或
build
)并标记
--无恢复

COPY console/ console/
RUN dotnet publish console/ConsoleProgram.csproj --no-restore -c Release -o /out
下面是Dockerfile的外观示例

FROM microsoft/dotnet:2.2-sdk AS publish
WORKDIR /src

COPY console/ConsoleProgram.csproj console/

RUN dotnet restore console/ConsoleProgram.csproj

COPY console/ console/

RUN dotnet publish console/ConsoleProgram.csproj --no-restore -c Release -o /app

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=publish /app .

ENTRYPOINT ["dotnet", "ConsoleProgram.dll"]
WebAPI也应该有类似的功能。现在看看你的docker-compose.yaml。您应该指定生成上下文和图像名称

webapi:
  image: 'webapi'
  build: 
    context: .
    dockerfile: ./webapi/Dockerfile
  restart: always
  ports:
    - 5000:80
  environment:
    MongoDB__Host: mongo
  depends_on:
    - mongo

console:
  image: 'console'
  build: 
    context: .
    dockerfile: ./console/Dockerfile
  restart: always
  depends_on:
    - webapi

因为我不知道你的项目结构,所以你需要小心这个答案中的所有项目路径。每个项目都应该有Dockerfile(在项目文件夹的根目录中),然后是一个docker-compose.yaml文件和多个docker-compose.override.yaml文件(如果需要)

Dockerfile中存在一些漏洞

1.不要复制
复制/控制台程序映像中的所有文件,首先只需复制csproj

COPY console/ConsoleProgram.csproj console/
2.复制csproj文件后,运行
dotnet restore
,以缩短映像构建时间

RUN dotnet restore console/ConsoleProgram.csproj
3.然后复制所有其他文件并运行
dotnet publish
(或
build
)并标记
--无恢复

COPY console/ console/
RUN dotnet publish console/ConsoleProgram.csproj --no-restore -c Release -o /out
下面是Dockerfile的外观示例

FROM microsoft/dotnet:2.2-sdk AS publish
WORKDIR /src

COPY console/ConsoleProgram.csproj console/

RUN dotnet restore console/ConsoleProgram.csproj

COPY console/ console/

RUN dotnet publish console/ConsoleProgram.csproj --no-restore -c Release -o /app

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=publish /app .

ENTRYPOINT ["dotnet", "ConsoleProgram.dll"]
WebAPI也应该有类似的功能。现在看看你的docker-compose.yaml。您应该指定生成上下文和图像名称

webapi:
  image: 'webapi'
  build: 
    context: .
    dockerfile: ./webapi/Dockerfile
  restart: always
  ports:
    - 5000:80
  environment:
    MongoDB__Host: mongo
  depends_on:
    - mongo

console:
  image: 'console'
  build: 
    context: .
    dockerfile: ./console/Dockerfile
  restart: always
  depends_on:
    - webapi
因为我不知道你们的项目结构,所以你们需要小心这个答案中的所有项目路径