2016-10-10 85 views
0

这是我第一次尝试使用.net核心和docker。我无法弄清楚什么是错的。DotNet构建CLI在终端工作,但不在Docker构建

我可以在终端中运行dotnet restore/dotnet build/dotnet run没有任何问题。该网站加载得很好。所以我想给docker一个尝试(最终在云中的VM上运行)。

我跑docker build -t latest .导致:

Step 5 : RUN dotnet build 
    ---> Running in e463aff85460 
    Project app (.NETCoreApp,Version=v1.0) will be compiled because project is not safe for incremental compilation. Use --build-profile flag for more information. 
    Compiling app for .NETCoreApp,Version=v1.0 
    /app/project.json(32,58): error NU1001: The dependency Microsoft.EntityFrameworkCore.Sqlite >= 1.0.1 could not be resolved. 

    Compilation failed. 
     0 Warning(s) 
     1 Error(s) 

    Time elapsed 00:00:00.0174732 

    The command 'dotnet build' returned a non-zero code: 1 

我试图改变project.json SQLite的版本没有任何的运气。

的NuGet回购: 饲料中使用:

https://www.myget.org/F/aspnetcirelease/api/v3/index.json 

https://api.nuget.org/v3/index.json 

dotnet --version 
1.0.0-preview3-003786 

没有编辑的dockerfile:

FROM microsoft/dotnet:latest 

COPY . /app 

WORKDIR /app 

RUN ["dotnet", "restore"] 

RUN ["dotnet", "build"] 

EXPOSE 5000/tcp 

CMD ["dotnet", "run", "--server.urls", "http://*:5000"] 

试过没有任何的运气创造了一些谷歌搜索后.dockerignore:

.git 
Dockerfile 
.DS_Store 
.gitignore 
README.md 
project.lock.json 

我在最新的macOS上(10.12)。

的package.json:努力打造泊坞窗容器后

{ 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.0.1", 
     "type": "platform" 
    }, 
    "Microsoft.AspNetCore.Diagnostics": "1.0.0", 
    "Microsoft.AspNetCore.Mvc": "1.0.1", 
    "Microsoft.AspNetCore.Razor.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Microsoft.AspNetCore.Routing": "1.0.1", 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1", 
    "Microsoft.AspNetCore.StaticFiles": "1.0.0", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0", 
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0", 
    "Microsoft.Extensions.Logging": "1.0.0", 
    "Microsoft.Extensions.Logging.Console": "1.0.0", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0", 
    "Microsoft.EntityFrameworkCore": "1.0.1", 
    "Microsoft.EntityFrameworkCore.Design": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Microsoft.EntityFrameworkCore.Relational": "1.0.1", 
    "Microsoft.EntityFrameworkCore.SQLite": "1.0.1", 
    "Microsoft.EntityFrameworkCore.Sqlite.Design": "1.0.1" 
    }, 

    "tools": { 
    "BundlerMinifier.Core": "2.0.238", 
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", 
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final" 
    }, 

    "frameworks": { 
    "netcoreapp1.0": { 
     "imports": [ 
     "dotnet5.6", 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 

    "runtimeOptions": { 
    "configProperties": { 
     "System.GC.Server": true 
    } 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "**/*.cshtml", 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "precompile": [ "dotnet bundle" ], 
    "prepublish": [ "bower install" ], 
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
    }, 

    "tooling": { 
    "defaultNamespace": "MyFirstApp" 
    } 
} 

输出:

Sending build context to Docker daemon 26.39 MB 
Step 1 : FROM microsoft/dotnet:latest 
---> 96d122fe36cb 
Step 2 : WORKDIR /root 
---> Using cache 
---> 0c5317108a5b 
Step 3 : COPY bin/Debug/netcoreapp1.0/publish/ /root/ 
---> Using cache 
---> d79700fa6c36 
Step 4 : ENTRYPOINT dotnet /root/MyProject.dll 
---> Using cache 
---> a99f30826ddd 
Successfully built a99f30826ddd 

回答

1

图像微软/ DOTNET:最新的是不适合构建,但仅适用于运行。

发布.NET核心应用到泊坞窗的最佳方式是:

  1. dotnet restore
  2. dotnet publish
  3. docker build -t your-tag与Dockerfile像:

    FROM microsoft/dotnet:latest 
    WORKDIR /root 
    COPY bin/Debug/netcoreapp1.0/publish/ /root/ 
    ENTRYPOINT dotnet /root/[your-project-name].dll 
    

    其中斌/调试/ netcoreapp1.0/publish是你真正的发布路径。

如果你想构建.NET应用程序的核心在泊坞窗这张图片:

FROM microsoft/dotnet:onbuild 

图像版本之间的差异解释here

问候

+1

一个更好的链接描述图片之间的区别https://docs.microsoft.com/en-us/dotnet/articles/core/docker/building-net-docker-images – Dennis

+0

1.&2. dotnet而不是docke R-命令? – DannyThunder

+1

@DannyThunder是的 - 我用码头而不是dotnet,谢谢。这是深夜..编辑 – rudolfdobias