码头工人镜像无法正常工作或运行

时间:2019-07-31 13:54:53

标签: api docker asp.net-core

这是我一直在努力争取在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,我仍然需要一个答案

1 个答案:

答案 0 :(得分:1)

所以这里有两件事,但不一定表示Docker或Dockerfile有问题。

  1. 大小仅200-300MB

    那是正确的。您没有指示要使用Windows还是Linux容器,但是无论哪种情况,大部分的工作量仅来自.NET Core运行时。容器的全部目的是共享主机OS(与VM不同,在VM中,每个VM都有自己的单独OS安装)。来自基本操作系统映像的唯一内容是用户特定的文件和目录。主要系统组件代理到主机操作系统。总而言之,我不知道您在这里期望的大小,但是说实话,图像的 large 大小有点200-300MB。在许多情况下,可以将ASP.NET Core应用程序映像打包到最小25MB-30MB,尽管如果包括完整的运行时,通常它将更接近200-300MB。

  2. 容器未运行。

    所有方法就是退出。运行容器时,将调用入口点行,这将启动在Kestrel中运行的ASP.NET Core应用程序。毕竟,那当然是运行Program.Main,因为它只是一个控制台应用程序。这样便构建了Web主机并调用Run,该监听器侦听TCP套接字连接,从而使应用程序保持运行状态,从而使容器保持运行状态。

    如果容器未运行,则应用程序退出。发生这种情况可能有不同的原因,但是最可能的原因是在Web主机构建阶段抛出了运行时异常(即ProgramStartup中的某些事件引发了异常)。尝试运行类似的内容:

    docker logs -t {container name}
    

    您可能会在那里看到堆栈跟踪和异常。相应地解决该问题。