#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
«.
Я совершенно сбит с толку.