【问题标题】:.Net Core on Heroku with DockerHeroku 上的 .Net Core 与 Docker
【发布时间】:2018-06-23 19:08:49
【问题描述】:

上下文

我正在尝试使用 docker 在 Heroku 上部署 aspnet 核心 示例应用,但无法正常工作。

回购:https://github.com/mykeels/sample-web-api
导游:https://blog.devcenter.co/deploy-asp-net-core-2-0-apps-on-heroku-eea8efd918b6

环境

框架 .NET Core 2.1.201
SO: W10 Build 17134.1
Docker: Docker for Windows 18.03 版。 1-ce-win65(17513)

我做的步骤

dotnet 发布

docker 构建

Heroku 登录

标记和推送

Docker 文件

Heroku 上的应用

未运行

我也试过这个:

问题:怎么了?

【问题讨论】:

  • 尝试在 Dockerfile 中将 CMD ASPNETCORE_URLS=http://*:$PORT dotnet Blogifier.Web.dll 替换为 ENTRYPOINT ["dotnet", "Blogifier.Web.dll"]。另外,我注意到在 dotnet 发布屏幕截图中,dll 名称是 SampleWebApi.dll 而不是 Blogifier.Web.dll所以请确保 dll 名称正确
  • 不是 dll 名称。我尝试了两个不同的应用程序。将尝试将 CMD 更改为 ENTRYPOINT
  • @MohsinMehmood 没用 :(

标签: docker heroku .net-core dockerfile


【解决方案1】:

这是您可以使用 Heroku 进行这项工作的另一种方法。

在解决方案的根目录中创建 Dockerfile

#https://github.com/dotnet/dotnet-docker/tree/master/samples/aspnetapp

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /app

COPY . .

CMD ASPNETCORE_URLS=http://*:$PORT dotnet [THE NAME OF YOUR FILE].dll

创建一个名为“publish.bat”的简单批处理文件(假定为 Windows 操作系统)

注意 - 运行 dotnet clean 时,它不会清除发布文件夹。我建议您在发布之前删除目录的内容。您可以根据需要将其添加到批处理文件中。

REM - This file assumes that you have access to the application and that you have docker installed
REM : Setup your applications name below
SET APP_NAME=""

REM - Delete all files and folders in publish
del /q ".\bin\Release\netcoreapp2.1\publish\*"
FOR /D %%p IN (".\bin\Release\netcoreapp2.1\publish\*.*") DO rmdir "%%p" /s /q

dotnet clean --configuration Release
dotnet publish -c Release
copy Dockerfile .\bin\Release\netcoreapp2.1\publish\
cd .\bin\Release\netcoreapp2.1\publish\
call heroku container:login
call heroku container:push web -a %APP_NAME%
call heroku container:release web -a %APP_NAME%

现在只需从解决方案的根目录运行 publish.bat

c:\dev\my-amazing-app\publish.bat

信息:

【讨论】:

  • 不错的答案 - 它帮助了我!但是在 Login Succeeded 消息之后,我的脚本在 heroku 容器:login 处停止。如何避免?
  • 没关系,在每个 heroku 命令解决这个问题之前添加“调用”。也许您可以将其添加到您的示例中。 :-)
【解决方案2】:

解决方案

首先:将docker tagdocker push 命令替换为:

heroku container: push web -a <app-name>

那时我发现 heroku 注册表 连接没有建立。

配置命令:

heroku container: login

此命令仅适用于默认终端上的 windows(不适用于带有 bash 的 cmder)。

或命令

docker login --username = _ --password = $ (heroku auth: token) registry.heroku.com

现在,只需执行以下命令。

heroku container: push web -a <app-name>
//example:
heroku container: push web -a sample-web-carlos

发布

heroku container: release web -a <app-name>
//example:
heroku container: release web -sample-web-carlos

阅读更多:
https://github.com/heroku/heroku-container-registry/issues/45
https://devcenter.heroku.com/articles/container-registry-and-runtime

感谢 mohsin Mehmood 的帮助!

【讨论】:

  • 我一步一步按照上面提到的指南进行操作,除了必须运行heroku release 命令外,没有遇到任何问题。如果您在指南中注意到它提到在docker tagdocker push 命令之前执行heroku loginheroku container:login 命令。 heroku container:login 命令是能够推送到 heroku 注册表所必需的,这可能就是为什么你得到没有基本身份验证凭据错误的原因
【解决方案3】:

好的,我设法弄明白了https://simple-web-mohsin.herokuapp.com/api/values

  1. 无需按照上述建议更改ENTRYPOINT ["dotnet", "Blogifier.Web.dll"]
  2. docker push 命令后,需要按照this 运行release 命令

所以在 docker push 命令之后运行以下命令

heroku container:release web --app={app name}

对我来说是

heroku container:release web --app=simple-web-mohsin

注意:上面命令中的web字是进程类型,需要按原样输入。

【讨论】:

  • 查看新的打印屏幕。也许是“没有基本身份验证凭据”的东西,但我在该命令之前登录了它。
  • 在您最初的问题中,没有提到 push 命令失败。所以我提出了假设 docker push 正在工作的解决方案。在推送到 heroku 注册表之前需要 heroku:login 命令。无论如何,您的问题得到解决是件好事
  • 查看初始帖子的打印屏幕。它在“标记和推送”上。
  • 好的,在最初的帖子打印屏幕中,我看不到错误Docker push exited with 1 only no basic auth credentials。
猜你喜欢
  • 1970-01-01
  • 2021-03-02
  • 2019-09-09
  • 2021-02-05
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多