我正在尝试创建一个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也没有很多经验。
我对任何建议都持开放态度,这可以改善我对基本概念的态度。提前致谢。
答案 0 :(得分:1)
首先,我认为具体问题不是与Docker相关的问题。这是与网络相关的问题。也许this SO线程会有所帮助。
关于您的Dockerfile:
RUN
命令都会创建一个图层。同时,您可能希望使用多个RUN
命令来提高可读性并从缓存中获益。所以,你需要在两者之间找到平衡点。在这种特殊情况下,我认为您应该将npm
命令链接在一个RUN
语句中。latest
版本。 latest
将始终在创建图像时下载最新版本,并且您不知道此新版本是否存在破坏您应用的错误。因此,我们的想法是在特定版本中进行测试,并在生产中使用相同的版本。如果您想稍后升级到更新版本,则需要先使用新版本测试您的应用程序,然后使用新版本更新Dockerfile 这是一个例如。
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;