gpt4 book ai didi

Docker 中的 ASP.NET 5.0 beta 8 无法启动

转载 作者:行者123 更新时间:2023-12-02 10:15:29 24 4
gpt4 key购买 nike

我一直在 Docker 容器中使用 ASP.NET 5.0 beta 7 运行一个网站,使用官方 Docker 镜像 - https://github.com/aspnet/aspnet-docker - 运行良好。

我最近将我的项目更新到了 beta 8,并更改了 Dockerfile 以使用 beta 8 版本的 Docker 镜像。当我在 Windows 计算机上本地运行它时,无论我使用 Visual Studio 通过 IIS Express 启动项目,还是使用 Kestrel 运行它,一切都工作正常。

但是,当我将其推送到我的 Dokku 服务器时,它似乎无法正常启动。我没有从容器输出中收到任何错误,但我有一个 CHECKS 文件,Dokku 使用该文件来确保 Web 服务器已启动,但该文件失败了(表明它尚未正确启动,或者没有按应有的方式进行监听) 。我尝试删除检查,但我也无法连接到它 - 我从 nginx 收到错误的网关消息。

我不知道为什么会发生这种情况,因为当我推送到 Dokku 时,我得到以下响应:

...
remote: [1G-----> Attempt 5/5 Waiting for 10 seconds ...[K
remote: [1G CHECKS expected result:[K
remote: [1G http://localhost/ => "My Website"[K

remote: Could not start due to 1 failed checks.[K
remote: [1G ! [K
remote: [1Gcurl: (7) Failed to connect to 172.17.2.14 port 5000: Connection refused[K
remote: [1G ! Check attempt 5/5 failed.[K
remote: [1G=====> mywebsite container output:[K
remote: [1G info : [Microsoft.Framework.DependencyInjection.DataProtectionServices] User profile is available. Using '/root/.local/share/ASP.NET/DataProtection-Keys' as key repository; keys will not be encrypted at rest.[K

remote: [1G Hosting environment: Production[K
remote: [1G Now listening on: http://localhost:5000[K
remote: [1G Application started. Press Ctrl+C to shut down.[K
remote: [1G=====> end mywebsite container output[K`
...

这看起来很奇怪,因为它看起来像是正在启动,但在检查失败之后。正如我所说,删除检查意味着它部署成功,但我无法连接到它。

我的 Dockerfile 是:

FROM microsoft/aspnet:1.0.0-beta8

# Install NPM
RUN apt-get update && apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup | bash -
RUN apt-get install -y nodejs

# Install Gulp
RUN npm install -g gulp

COPY . /app
WORKDIR /app
RUN ["dnu", "restore"]

WORKDIR ./src/mywebsite

RUN ["npm", "install"]
RUN ["gulp", "min"]

EXPOSE 5000
ENTRYPOINT dnx kestrel

最佳答案

我遇到了类似的问题,无法访问在 Windows 上的 Docker 容器中运行的 ASP.NET 5 beta 8 网站,我收到了与您相同的消息。

我不确定这对您来说是否是同样的问题,但我是这样解决的。症状看起来很相似。该问题与此行相关:

Now listening on: http://localhost:5000

有趣的是,当我执行 docker ps 时,它显示端口 5000 正在 0.0.0.0 上转发,而不是 localhost

解决方案

我解决此问题的方法是更新 project.json 中的 web 命令以指定要使用的实际网络接口(interface):

"commands": {
"web": "Microsoft.AspNet.Server.Kestrel --server.urls http://0.0.0.0:5000",
"ef": "EntityFramework.Commands"
},

完成此操作后,我可以看到 Kestrel 现在正在监听 Docker 为我转发的同一接口(interface),并且我能够毫无问题地访问该网站。

使用 Dockerfile 的替代方案

您也可以只更新 Dockerfile 中的 ENTRYPOINT 命令:

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"]

(您需要将 0.0.0.0 替换为 Docker 公开的确切接口(interface))。

博客文章/文章

如果您想了解更多相关信息(或如何使用 ASP.NET 5 在 Windows 上运行 Docker),请查看我的博客文章:http://dotnetliberty.com/index.php/2015/10/25/asp-net-5-running-in-docker-on-windows/

关于Docker 中的 ASP.NET 5.0 beta 8 无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33462774/

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