use*_*807 2 asp.net docker dokku asp.net-core
我一直在Docker容器中使用ASP.NET 5.0 beta 7运行一个网站,使用官方Docker镜像 - https://github.com/aspnet/aspnet-docker - 工作正常.
我最近将我的项目更新为beta 8,并将Dockerfile更改为使用了Docker映像的beta 8版本.当我在Windows机器上本地运行它时,一切正常,无论我使用Visual Studio通过IIS Express启动项目,还是使用Kestrel运行它.
但是,然后我把它推到我的Dokku服务器,它似乎没有正常启动.我没有从容器输出中得到任何错误,但我有一个CHOKS文件,Dokku用它来确保Web服务器已经启动,这失败了(表明它没有正确启动,或者没有按原样收听) .我试图删除CHECKS,我也无法连接到它 - 我从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`
...
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪,因为它看起来像是在启动,但在检查失败后.正如我所说,删除检查意味着它成功部署,但后来我无法连接到它.
我的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
Run Code Online (Sandbox Code Playgroud)
我遇到了一个类似的问题,我无法访问在Windows上运行在Docker容器中的ASP.NET 5 beta 8网站,我收到了与您相同的消息.
我不确定这对你来说是否会是同一个问题,但这就是我如何修复它.症状看起来很相似.这个问题与这条线有关:
Now listening on: http://localhost:5000
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我做了docker ps它时,它显示端口5000正在转发0.0.0.0,而不是localhost.
解决方案
我修复此问题的方法是更新我的web命令project.json以指定要使用的实际网络接口:
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel --server.urls http://0.0.0.0:5000",
"ef": "EntityFramework.Commands"
},
Run Code Online (Sandbox Code Playgroud)
一旦我这样做,我就可以看到Kestrel现在正在倾听Docker为我转发的相同界面,并且我能够毫无问题地访问该网站.
替代使用Dockerfile
您也可以在以下位置更新ENTRYPOINT命令Dockerfile:
ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"]
Run Code Online (Sandbox Code Playgroud)
(您将需要替换0.0.0.0Docker正在公开的确切接口).
博客文章/撰写
如果您想了解更多相关信息(或如何在Windows上使用ASP.NET 5运行Docker),请查看我的博客文章:http://dotnetliberty.com/index.php/2015/10/25/ ASP-净-5-磨合-泊坞窗上,窗/
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |