Получение «Команда serve должна быть запущена в проекте Angular, но не удалось найти определение проекта» при запуске Docker Compose - PullRequest
0 голосов
/ 03 октября 2019

Во-первых, я сообщаю вам, что в настоящее время я учусь в разработке программного обеспечения. Поэтому я прошу вашей терпимости в отношении моего вопроса:)

У меня возникла проблема при попытке добавить мои службы создания докеров. Это 3 службы docker-compose.yml: Java Backend, Angular 7 Frontend, Postgres DB.


[РЕДАКТИРОВАТЬ]: решение было найдено Wassim. Мне пришлось изменить громкость в службе ct-front ОТ:

volumes:
    - '.:/app'

TO

volumes:
    - 'contacts-front:/app'

THEN add contacts-front:к моей декларации томов.

volumes:
    db_data:
    contacts-front:

Back и DB работают нормально. Но приложение Angular не работает. Я получаю довольно известную ошибку:

cont-ct-front | The serve command requires to be run in an Angular project, but a project definition could not be found.

Если я запускаю «ng v» в своем приложении Angular, я получаю следующий вывод:

Angular CLI: 7.3.7
Node: 12.9.0
OS: win32 x64
Angular: 7.2.11
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.13.7
@angular-devkit/build-angular     0.13.7
@angular-devkit/build-optimizer   0.13.7
@angular-devkit/build-webpack     0.13.7
@angular-devkit/core              7.3.7
@angular-devkit/schematics        7.3.7
@angular/cdk                      7.3.6
@angular/cli                      7.3.7
@angular/material                 7.3.6
@ngtools/webpack                  7.3.7
@schematics/angular               7.3.7
@schematics/update                0.13.7
rxjs                              6.3.3
typescript                        3.2.4
webpack                           4.29.0

Конечно, я пробовал решениеЯ нашел в Google, который должен работать

ng update @angular/cli --migrate-only --from=<angular-cli version>

Но ошибка остается.

Вот мои файлы конфигурации Docker.

docker-compose.yml

version: '3.7'

services:
    ct-db:
        build:
            context: .
            dockerfile: Dockerfile-db
        container_name: cont-ct-db
        restart: unless-stopped
        ports:
            - 5432:5432
        expose:
            - 5432
        environment:
            POSTGRES_USER: admin_ct
            POSTGRES_PASSWORD: 123
            POSTGRES_DB: db_contacts
        volumes:
          - db_data:/var/lib/postgres/data
        networks:
            - ct-network

    ct-back:
        depends_on:
            - ct-db
        build:
            context: .
            dockerfile: Dockerfile-back
        container_name: cont-ct-back
        ports:
            - 8080:8080
        expose:
            - 8080
        environment:
            SPRING_DATASOURCE_USERNAME: admin_ct
            SPRING_DATASOURCE_PASSWORD: 123
            SPRING_DATASOURCE_URL: jdbc:postgresql://ct-db:5432/db_contacts
        networks:
            - ct-network

    ct-front:
        build: 
            context: .
            dockerfile: contacts-front/Dockerfile-front
        container_name: cont-ct-front
        volumes:
            - '.:/app'
            - '/app/node_modules'
        ports:
            - 4200:4200
        networks:
            - ct-network

networks:
    ct-network:

volumes:
    db_data:

Dockerfile-back

FROM openjdk:8
ADD contacts-back/contacts-back.jar contacts-back.jar
ENTRYPOINT ["java", "-jar", "contacts-back.jar"]

Dockerfile-front

# base image
FROM node:latest

# install chrome for protractor tests
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get update && apt-get install -yq google-chrome-stable

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY contacts-front/package.json /app/package.json
RUN npm install
RUN npm install -g @angular/cli@7.3.7

# add app
COPY contacts-front/. /app

# start app
CMD ng serve --host 0.0.0.0

Dockerfile-db

FROM postgres:latest
COPY db/db_data.sql /docker-entrypoint-initdb.d/init.sql
COPY db/db_insert.sql /opt/db_insert.sql
COPY sh/backup-db.sh /opt/backup-db.sh
RUN apt-get update \
&& apt-get install vim -y \
&& export EDITOR=/usr/bin/vim \
&& chmod +x /opt/backup-db.sh \

Мое дерево каталогов:

contacts-back       --> directory containing the JAR file
contacts-front      --> directory containing the Angular application
db                  --> directory containing the SQL scripts
sh                  --> directory containing the SH scripts
docker-compose.yml
Dockerfile-back 
Dockerfile-db

Важный момент: приложение Angular работает нормально, если я помещаю все конфигурационные файлы и скрипты docker в каталог приложения Angular (contacts-front). Но это было бы ужасно, правда?

Кто-нибудь видит, что я делаю неправильно?

Как обычно, большое спасибо за вашу помощь! :)

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Я думаю, что проблема в пути к хосту, указанном в томе "ct-front":

volumes:
        - 'contacts-front:/app'
0 голосов
/ 03 октября 2019

Кажется, что ваши файлы angular.json package.json и т. Д. Отсутствуют, если они существуют, но все еще сталкиваются с той же проблемой, чем команда ng serve из соответствующего каталога приложения angular. Он должен быть возбужден по пути, где присутствуют все файлы угловых проектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...