dotnet aspnetcore docker 构建失败,错误代码为 145
dotnet aspnetcore docker build fails with a 145 error code
我已经使用 this tutorial 创建了我的第一个 docker webapi 项目。
我正在使用 windows 7(docker 工具箱)。
这是我的 运行:
dotnet new webapi
这是 Dockerfile:
FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000
ENTRYPOINT ["dotnet", "run"]
这就是我创建图像的方式:
docker build -t mydemos:aspnetcorehelloworld .
这就是我创建和 运行 容器的方式:
docker run -d -p 8080:5000 -t mydemos:aspnetcorehelloworld
我的服务 运行 成功地作为 docker 容器。
然后,我尝试更改 Dockerfile 以在 aspnetcore 基础映像上工作:
FROM microsoft/dotnet:latest
已更改为 FROM microsoft/aspnetcore:1.0.1
新的 Dockerfile 看起来像:
FROM microsoft/aspnetcore:1.0.1
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000
ENTRYPOINT ["dotnet", "run"]
现在,我尝试使用
构建新图像
docker build -t mydemos:aspnetcorehelloworld1 .
然后出现错误。
这是构建日志:
Sending build context to Docker daemon 636.9 kB
Step 1/8 : FROM microsoft/aspnetcore:1.0.1
---> 2c7bbc508bb2
Step 2/8 : COPY . /app
---> Using cache
---> 1d5b9bd908b3
Step 3/8 : WORKDIR /app
---> Using cache
---> c1d5d091d111
Step 4/8 : RUN dotnet restore
---> Running in 8399e21caeb2
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
The command 'dotnet restore' returned a non-zero code: 145
我进入 url,重新安装了一些东西,但仍然出现错误。
我尝试在同一个命令行会话中使用 dotnet cli 命令,我成功了(dotnet restore
有效)。
我已经尝试搜索这个错误,但找不到任何解决方案。
我在这里错过了什么?我在多个场合和测试中遇到此 145 错误。
您使用的图像仅包含 .NET Core 运行时间,不包含 SDK。尝试使用以下存储库中的基本图像:
https://hub.docker.com/r/microsoft/aspnetcore-build/
您的 Dockerfile 中包含以下几行:
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
这意味着 dotnet restore
和 dotnet build
命令在您正在使用的图像中 运行ning。由于您使用的图像没有安装 SDK,因此无法找到这些命令,并且如您所见失败。我上面链接的存储库中的图像在其中安装了 SDK,因此可以找到并执行 dotnet restore
和 dotnet build
命令。
使用安装了 SDK 的基础映像的替代方法是在您的开发机器上执行 build/publish 过程,然后简单地将发布的输出复制到映像中。然后,您的 Dockerfile 只需要查看以下内容:
FROM microsoft/aspnetcore:1.0.1
WORKDIR /app
COPY ./app .
ENTRYPOINT ["dotnet", "TheNameOfYourProject.dll"]
请注意,现在图像中的 dotnet
命令 运行 只是 运行 您的 (pre-built) DLL 中的命令。这只需要运行时间,不需要SDK。
在我的例子中是一个愚蠢的错误,但也许可以帮助别人。
我更改了项目名称,这破坏了 docker 撰写。
因此,在我的例子中,Web 应用程序的文件夹、项目(它是 .csproj 文件)和 运行 与 dotnet 的 DLL 应该具有相同的名称,因为我在 docker文件假设。
总而言之,请仔细查看我们为每件事使用的名称。
我收到此错误是因为 Dockerfile 和 docker-[= 之间的差异36=].
Dockerfile(原件):
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
...
我更改了 Dockerfile 以将文件移动到 nginx 的默认目录...
Dockerfile(更改):
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /usr/share/nginx/html
...
但是 docker-compose.yml 引用了旧文件夹...
docker-compose.yml(原件):
services:
web:
working_dir: /app
要修复它,只需更新 working_dir 以指向新目录...
docker-compose.yml(修复):
services:
web:
working_dir: /usr/share/nginx/html
在我的例子中,我重命名了程序集名称,这导致了失败。我注意到 Dcokerfile
的最后一行
ENTRYPOINT ["dotnet", "assembly_name.dll"]
assembly_name 不正确。
我已经使用 this tutorial 创建了我的第一个 docker webapi 项目。
我正在使用 windows 7(docker 工具箱)。
这是我的 运行:
dotnet new webapi
这是 Dockerfile:
FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000
ENTRYPOINT ["dotnet", "run"]
这就是我创建图像的方式:
docker build -t mydemos:aspnetcorehelloworld .
这就是我创建和 运行 容器的方式:
docker run -d -p 8080:5000 -t mydemos:aspnetcorehelloworld
我的服务 运行 成功地作为 docker 容器。
然后,我尝试更改 Dockerfile 以在 aspnetcore 基础映像上工作:
FROM microsoft/dotnet:latest
已更改为 FROM microsoft/aspnetcore:1.0.1
新的 Dockerfile 看起来像:
FROM microsoft/aspnetcore:1.0.1
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000
ENTRYPOINT ["dotnet", "run"]
现在,我尝试使用
构建新图像docker build -t mydemos:aspnetcorehelloworld1 .
然后出现错误。
这是构建日志:
Sending build context to Docker daemon 636.9 kB
Step 1/8 : FROM microsoft/aspnetcore:1.0.1
---> 2c7bbc508bb2
Step 2/8 : COPY . /app
---> Using cache
---> 1d5b9bd908b3
Step 3/8 : WORKDIR /app
---> Using cache
---> c1d5d091d111
Step 4/8 : RUN dotnet restore
---> Running in 8399e21caeb2
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
The command 'dotnet restore' returned a non-zero code: 145
我进入 url,重新安装了一些东西,但仍然出现错误。
我尝试在同一个命令行会话中使用 dotnet cli 命令,我成功了(dotnet restore
有效)。
我已经尝试搜索这个错误,但找不到任何解决方案。
我在这里错过了什么?我在多个场合和测试中遇到此 145 错误。
您使用的图像仅包含 .NET Core 运行时间,不包含 SDK。尝试使用以下存储库中的基本图像:
https://hub.docker.com/r/microsoft/aspnetcore-build/
您的 Dockerfile 中包含以下几行:
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
这意味着 dotnet restore
和 dotnet build
命令在您正在使用的图像中 运行ning。由于您使用的图像没有安装 SDK,因此无法找到这些命令,并且如您所见失败。我上面链接的存储库中的图像在其中安装了 SDK,因此可以找到并执行 dotnet restore
和 dotnet build
命令。
使用安装了 SDK 的基础映像的替代方法是在您的开发机器上执行 build/publish 过程,然后简单地将发布的输出复制到映像中。然后,您的 Dockerfile 只需要查看以下内容:
FROM microsoft/aspnetcore:1.0.1
WORKDIR /app
COPY ./app .
ENTRYPOINT ["dotnet", "TheNameOfYourProject.dll"]
请注意,现在图像中的 dotnet
命令 运行 只是 运行 您的 (pre-built) DLL 中的命令。这只需要运行时间,不需要SDK。
在我的例子中是一个愚蠢的错误,但也许可以帮助别人。 我更改了项目名称,这破坏了 docker 撰写。 因此,在我的例子中,Web 应用程序的文件夹、项目(它是 .csproj 文件)和 运行 与 dotnet 的 DLL 应该具有相同的名称,因为我在 docker文件假设。 总而言之,请仔细查看我们为每件事使用的名称。
我收到此错误是因为 Dockerfile 和 docker-[= 之间的差异36=].
Dockerfile(原件):
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
...
我更改了 Dockerfile 以将文件移动到 nginx 的默认目录...
Dockerfile(更改):
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /usr/share/nginx/html
...
但是 docker-compose.yml 引用了旧文件夹...
docker-compose.yml(原件):
services:
web:
working_dir: /app
要修复它,只需更新 working_dir 以指向新目录...
docker-compose.yml(修复):
services:
web:
working_dir: /usr/share/nginx/html
在我的例子中,我重命名了程序集名称,这导致了失败。我注意到 Dcokerfile
的最后一行ENTRYPOINT ["dotnet", "assembly_name.dll"]
assembly_name 不正确。