Во-первых, я сообщаю вам, что в настоящее время я учусь в разработке программного обеспечения. Поэтому я прошу вашей терпимости в отношении моего вопроса:)
У меня возникла проблема при попытке добавить мои службы создания докеров. Это 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). Но это было бы ужасно, правда?
Кто-нибудь видит, что я делаю неправильно?
Как обычно, большое спасибо за вашу помощь! :)