Сборка Angular 5 ng: «Не удается найти какие-либо приложения в файле `.angular-cli.json`»

#angular #docker #docker-compose #dockerfile #angular5

#угловой #докер #докер-сочинение #докерфайл #угловой 5

Вопрос:

У меня есть веб-сайт Angular 5, который я пытаюсь закрепить. Если я сделаю ng build это на своем локальном компьютере, веб-сайт будет работать нормально. Однако, если я попытаюсь создать веб-сайт как часть образа Docker, это приведет к сбою со следующей ошибкой:

Не удается найти какие-либо приложения внутри .angular-cli.json .

Из поиска в Google выясняется, что эта ошибка часто вызвана тем, что файл .angular-cli.json находится в неправильном каталоге. Тем не менее, он находится в корне проекта веб-сайта вместе с файлом package.json, и если я создам частичный образ Docker, я увижу, что он был скопирован в корень файловой системы изображения, где я и ожидаю его найти.

Я также вижу, что в файле .angular-cli.json есть раздел приложений, чего я и ожидал, учитывая, что он построен на моей машине.

Что еще может вызвать ошибку «Не удается найти приложения в файле .angular-cli.json»?

Вот файл Dockerfile:

 FROM node:8 as web-build  COPY package.json yarn.lock ./ RUN yarn  COPY ./ ./  ARG PROD_BUILD="true"  RUN if [ "${PROD_BUILD}" = "true" ]; then yarn run build:prod; else yarn run build ; fi  ARG BUILD_NUMBER="latest" LABEL BuildNumber=${BUILD_NUMBER}  

Вот раздел сценариев файла package.json:

 "scripts": {  "ng": "ng",  "build:prod": "ng build -e=container --prod",  "build": "ng build -e=container",  "test": "ng test --sourcemap=false"  }  

А вот раздел приложений в файле .angular-cli.json:

 "apps": [  {  "root": "src",  "outDir": "dist",  "assets": [  "assets",  "favicon.ico",  "favicon-152.png"  ],  "index": "index.html",  "main": "main.ts",  "polyfills": "polyfills.ts",  "test": "test.ts",  "tsconfig": "tsconfig.app.json",  "testTsconfig": "tsconfig.spec.json",  "prefix": "app",  "serviceWorker": false,  "styles": [  "styles.scss"  ],  "scripts": [],  "environmentSource": "environments/environment.ts",  "environments": {  "dev": "environments/environment.ts",  "container": "environments/environment.container.ts"  }  }  ]  

From the root directory of my Angular project, the directory containing the .angular-cli.json, package.json and Dockerfile files, I can run the following command manually on my machine, and it will work:

yarn run build:prod

However, if I try to build the Docker image, using docker build -t webapp_test01 . I get the following:

 [ ] Building 12.0s (10/10) FINISHED  =gt; [internal] load build definition from Dockerfile  =gt; =gt; transferring dockerfile: 294B  =gt; [internal] load .dockerignore  =gt; =gt; transferring context: 146B  =gt; [internal] load metadata for docker.io/library/node:8  =gt; [auth] library/node:pull token for registry-1.docker.io  =gt; [internal] load build context  =gt; =gt; transferring context: 11.22MB  =gt; [1/5] FROM docker.io/library/node:8@sha256:a681bf74805b80d03eb21a6c0ef168a976108a287a74167ab593fc953aac34df  =gt; CACHED [2/5] COPY package.json yarn.lock ./  =gt; CACHED [3/5] RUN yarn  =gt; [4/5] COPY ./ ./  =gt; ERROR [5/5] RUN if [ "true" = "true" ]; then yarn run build:prod; else yarn run build ; fi ------  gt; [5/5] RUN if [ "true" = "true" ]; then yarn run build:prod; else yarn run build ; fi: #10 1.538 yarn run v1.21.1 #10 1.614 $ ng build -e=container --prod #10 6.374 Unable to find any apps in `.angular-cli.json`. #10 6.405 error Command failed with exit code 1. #10 6.405 info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. ------ executor failed running [/bin/sh -c if [ "${PROD_BUILD}" = "true" ]; then yarn run build:prod; else yarn run build ; fi]: exit code: 1  

I tried commenting out the RUN if ... line in the Dockerfile and the image builds. Running a container from this cut-down image I also exec’ed into the container to check the .angular-cli.json and package.json files were present in the root of the container. Then I tried manually running yarn run build:prod and yarn run build from the container root. Both resulted in the same «Unable to find any apps in .angular-cli.json «.

Последнее, что я попытался сделать, пока выполнялся в контейнере, была попытка отследить исполняемый файл ng. Затем я побежал /node_modules/@angular/cli/bin/ng build -e=container от корневого контейнера. В очередной раз он вернулся с той же ошибкой «Не удалось найти какие-либо приложения .angular-cli.json «.

Я совершенно сбит с толку.