gpt4 book ai didi

api - docker 镜像无法正常工作或运行

转载 作者:行者123 更新时间:2023-12-02 18:27:50 31 4
gpt4 key购买 nike

这是我在 2 周甚至 3 周内一直在努力解决的一个主要问题的一部分,首先,我不是 docker 专家,事实上,我什至对 docker 一无所知,我所知道的是,我需要使用它来在 localhost 中的 api 和我的 react native 应用程序之间建立连接,事情是,我设法让它在我创建的另外两个项目上工作以测试 docker,但是不在我真正需要的那个。这是 .net core 2.2 中 api 的 dockerfile

我的 dockerfile 是我在 stackoverflow 中找到的代码和 docker 文档中的示例的组合,用于在 .net 核心中创建一个 docker,这个特定文件在另外两个 api 上为我工作,一个作为空白项目,另一个带有类库。

下面的代码显示了 dockerfile,当我运行命令行并创建图像时,它没有显示错误,但我知道有问题,因为当我运行 docker image ls 时,docker 图像大小约为 200-300mb,似乎太小了,当我使用 docker run 运行该图像时...并检查正在运行的 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:解决了 - 有点......

我设法通过手动复制和粘贴不同项目上的文件来运行我的docker,每个文件单独复制并粘贴到第二个项目中,每次创建docker镜像,是的,一个非常可怕和乏味的过程,但它有效,虽然,我们不再考虑这个解决方案了,因为这个过程对于我们的 scrum 项目来说太慢了,我们需要将 react native 连接到我们的 localhost api,我仍然需要一个答案

最佳答案

所以这里有两件事,都不一定表明 Docker 或你的 Dockerfile 有问题。

  • 大小仅为200-300MB

    这差不多。您尚未说明您使用的是 Windows 容器还是 Linux 容器,但无论哪种情况,大部分重量都来自 .NET Core 运行时。容器的全部意义在于主机操作系统是共享的(不像每个虚拟机都有自己独立的操作系统安装的虚拟机)。来自基本操作系统镜像的唯一内容是用户特定的文件和目录。主要系统组件被代理到主机操作系统。总而言之,我不知道您对大小的期望,但老实说,200-300MB 对于图像来说有点大。在许多情况下,可以将 ASP.NET Core 应用程序镜像打包到低至 25MB-30MB,但如果包括完整的运行时,通常会更接近 200-300MB。
  • 容器未运行。

    所有的手段就是它退出了。当容器运行时,将调用入口点行,它只是启动在 Kestrel 中运行的 ASP.NET Core 应用程序。当然是运行 Program.Main ,毕竟它只是一个控制台应用程序。这反过来构建了网络主机并调用 Run ,它监听 TCP 套接字连接,保持应用程序运行,从而保持容器运行。

    如果容器未运行,则应用程序退出。这可能由于不同的原因而发生,但最可能的原因是在 Web 主机构建阶段引发了运行时异常(即 ProgramStartup 中的某些内容正在引发异常)。尝试运行类似的东西:
    docker logs -t {container name}

    您可能会在那里看到堆栈跟踪和异常。相应地解决问题。
  • 关于api - docker 镜像无法正常工作或运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57292477/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com