aspnetcore - 在docker容器中的角度通用

时间:2018-04-07 09:40:44

标签: docker asp.net-core-2.0 asp.net-core-webapi angular-universal

我正在尝试创建一个docker镜像,我可以打包一个aspnetcore2.0 / angular-universal应用程序,由于我的docker经验不足,我一直遇到问题。我真的可以使用一些帮助。

这是dockerfile内容:

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN npm cache clean --force
RUN npm install npm@latest
RUN npm install @angular/cli@latest
RUN npm install @ngtools/webpack@next
RUN node -v
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM microsoft/microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT [ "dotnet", "net-streetStyleCrew.dll" ]

由于aspnetcore-build:2.0附带了太旧的npm / node,因此必须进行更新。并且它没有去角度cli部分,但我认为当然需要新鲜。  这是我现在遇到的麻烦,我不知道在尝试更新时如何解决容器内的网络问题:

Step 5/15 : RUN npm install npm@latest
 ---> Running in 72531196fc83
npm ERR! Windows_NT 10.0.16299
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "npm@latest"
npm ERR! node v6.13.0
npm ERR! npm  v3.10.10
npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR! syscall getaddrinfo

npm ERR! network getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'

npm ERR! Please include the following file with any support request:
npm ERR!     C:\app\npm-debug.log
The command 'cmd /S /C npm install npm@latest' returned a non-zero code: 1 

我试图在Windows容器上运行它,因为我对Linux也没有很多经验。

我对任何建议都持开放态度,这可以改善我对基本概念的态度。提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,我认为具体问题不是与Docker相关的问题。这是与网络相关的问题。也许this SO线程会有所帮助。

关于您的Dockerfile:

  1. 官方最佳做法建议减少图层数量。每个RUN命令都会创建一个图层。同时,您可能希望使用多个RUN命令来提高可读性并从缓存中获益。所以,你需要在两者之间找到平衡点。在这种特殊情况下,我认为您应该将npm命令链接在一个RUN语句中。
  2. 此外,我认为您应该指定确切的版本,而不是使用latest版本。 latest将始终在创建图像时下载最新版本,并且您不知道此新版本是否存在破坏您应用的错误。因此,我们的想法是在特定版本中进行测试,并在生产中使用相同的版本。如果您想稍后升级到更新版本,则需要先使用新版本测试您的应用程序,然后使用新版本更新Dockerfile
  3. 这是一个例如。

    RUN mkdir /home/aus/.npm; \
    npm config set prefix /home/aus/.npm; \
    npm install --quiet --no-progress -g webpack@3.11.0; \
    npm install --quiet --no-progress -g @angular/cli@1.7.2; \
    npm install --quiet --no-progress;