DotNet构建CLI在终端中工作,但在Docker构建中不起作用

时间:2016-10-10 21:18:47

标签: .net macos docker asp.net-core dockerfile

这是我对.net核心和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"
  }
}

尝试构建docker容器后的输出:

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 个答案:

答案 0 :(得分:1)

image microsoft / dotnet:latest不是为构建而设计的,而是仅针对运行时。

将.net核心应用程序发布到docker中的最佳方法是:

  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
    

    其中bin / Debug / netcoreapp1.0 / publish是您真正的发布路径。

  4. 如果您想在docker中构建.net核心应用程序,请使用此图像:

    FROM microsoft/dotnet:onbuild
    

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

    此致

相关问题