这是我一直在努力争取在2甚至3个星期内解决问题的主要问题的一部分,首先,我不是Docker专家,实际上,我什至不知道关于docker的事情,我所知道的是,我需要使用它才能在localhost中的api和我的应用程序之间建立连接以响应本机,问题是,我设法使其在我创建的要测试的另外两个项目上工作码头工人,但不是我真正需要的码头工人。这是.net core 2.2中api的dockerfile
我的dockerfile是我在stackoverflow中找到的代码与docker文档中的示例的结合,以在.net core中创建一个docker,此特定文件在另外两个api上为我工作,一个作为空白项目,另一个一个带有类库的人。
下面的代码显示了dockerfile,当我运行命令行并创建映像时,它没有显示任何错误,但是我知道出了点问题,因为当我运行docker image ls时,docker映像大约为200-300mb大小,似乎太小了,当我使用docker run运行该映像时...并检查runnning的docker容器列表,它什么也没显示
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
WORKDIR /src
COPY ISARRHH.sln ./
COPY ISARRHH.BusinessGraph/*.csproj ./ISARRHH.BusinessGraph/
COPY ISARRHH.APIWeb/*.csproj ./ISARRHH.APIWeb/
RUN dotnet restore
# Copy everything else and build
COPY . ./
WORKDIR /src/ISARRHH.BusinessGraph
RUN dotnet publish -c Release -o /app
WORKDIR /src/ISARRHH.APIWeb
RUN dotnet publish -c Release -o /app
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app .
ENTRYPOINT ["dotnet", "isarrhh.dll"]
#######################################################
我希望这个流血的docker工作,这是我正在处理的一个模块上的计划b,让我头疼,我设法使其在另一个项目上工作,我希望它在工作此api可与Office 365和sharepoint一起使用
编辑:这是项目结构
ISARRHH (Solution)
|
|--ISARRHH.APIWeb (API)
| |_Dependencies
| |_Controllers
| |_Models
| |_Properties
| |_appsettings.json
| |_appsettings.Development.json
| |_Authentication.cs
| |_Configuration.cs
| |_Program.cs
| |_ProtectedApiCallHelper.cs
| |_PublicAppUsingUsernamePassword.cs
| |_SiteInformation.cs
| |_Startup.cs
| |_SiteInformation.cs
|
|--ISARRHH.BusinessGraph (Class Library)
| |_Dependencies
| |_UserGraph.cs
|
|--Solution Items
|_Dockerfile
|_.dockerignore
EDIT2:更多信息
REPOSITORY TAG IMAGE ID CREATED SIZE
isarrhh latest 67fc0628c921 13 minutes ago 268MB
据此,图像显然是成功创建的,但是当我使用
运行它时docker run -d -p 3001:80 ...
然后我与
核对docker container ls
当我检查此处提供的命令时,我也没有看到容器正在运行
docker logs -t isachile
我明白了:
MacBook: ISARRHH$ docker logs -t isachile
2019-07-31T18:49:22.553317346Z Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
2019-07-31T18:49:22.553390430Z https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
编辑3:解决了它-分类...
我设法通过手动将ever file粘贴并粘贴到另一个项目中来运行docker,每个文件分别复制并粘贴到第二个项目中,并且每次创建docker映像时,是的,这是一个非常可怕且乏味的过程,但是它起作用了,尽管我们不再考虑该解决方案,因为对于我们的Scrum项目而言,该过程太慢了,我们需要将react native连接到我们的localhost api,我仍然需要一个答案
答案 0 :(得分:1)
所以这里有两件事,但不一定表示Docker或Dockerfile有问题。
大小仅200-300MB
那是正确的。您没有指示要使用Windows还是Linux容器,但是无论哪种情况,大部分的工作量仅来自.NET Core运行时。容器的全部目的是共享主机OS(与VM不同,在VM中,每个VM都有自己的单独OS安装)。来自基本操作系统映像的唯一内容是用户特定的文件和目录。主要系统组件代理到主机操作系统。总而言之,我不知道您在这里期望的大小,但是说实话,图像的 large 大小有点200-300MB。在许多情况下,可以将ASP.NET Core应用程序映像打包到最小25MB-30MB,尽管如果包括完整的运行时,通常它将更接近200-300MB。
容器未运行。
所有方法就是退出。运行容器时,将调用入口点行,这将启动在Kestrel中运行的ASP.NET Core应用程序。毕竟,那当然是运行Program.Main
,因为它只是一个控制台应用程序。这样便构建了Web主机并调用Run
,该监听器侦听TCP套接字连接,从而使应用程序保持运行状态,从而使容器保持运行状态。
如果容器未运行,则应用程序退出。发生这种情况可能有不同的原因,但是最可能的原因是在Web主机构建阶段抛出了运行时异常(即Program
或Startup
中的某些事件引发了异常)。尝试运行类似的内容:
docker logs -t {container name}
您可能会在那里看到堆栈跟踪和异常。相应地解决该问题。