Docker -компонованных сборок, но приложение не работает на локальном хосте - PullRequest
1 голос
/ 03 августа 2020

Docker newb ie здесь. Docker -compose файлов строится без каких-либо проблем, но когда я пытаюсь запустить свое приложение на localhost: 4200, я получаю сообщение - localhost не отправил никаких данных на chrome, и сервер неожиданно прервал соединение в safari. Я работаю над MacOs Catalina. Вот мой файл yml:

version: '3.0' 

services:
  my-portal:

    build: .

    ports:
    - "4200:4200"

    depends_on:
    - backend

  backend: 

   build: ./backend

   ports:
    - "3000:3000"

   environment:

      POSTGRES_HOST: host.docker.internal
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: mypwd

   depends_on:
    -db

  db:
    image: postgres:9.6-alpine

    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: mypwd
      POSTGRES_HOST: host.docker.internal

    ports:
    - 5432:5432
    restart: always
    volumes:
    - ./docker/db/data:/var/lib/postgresql/data

Журнал для Angular:

/ docker -entrypoint. sh: Настройка завершена; готов к запуску Журнал для узла: db connected Журнал для Postgres: система баз данных готова принимать соединения

Ниже приведены мои файлы Angular и Node Docker:

FROM node:latest AS builder
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build --prod
EXPOSE 4200
# Stage 2
FROM nginx:alpine
COPY --from=builder /app/dist/*  /usr/share/nginx/html/

Узел:

FROM node:12    
WORKDIR /backend    
COPY package*.json ./    
RUN npm install    
COPY . .    
EXPOSE 3000
CMD [ "node", "server.js" ]

Когда я создал изображение Angular и запустил приложение на localhost:4200, он работал нормально. Пожалуйста, дайте мне знать, если я что-нибудь упустил.

1 Ответ

1 голос
/ 03 августа 2020

Ваш Angular контейнер построен FROM nginx, и вы используете конфигурацию Nginx по умолчанию из Docker Hub nginx image . Это прослушивает порт 80, так что номер порта, который вам нужно использовать в директиве ports::

services:
  quickcoms-portal:
    build: .
    ports:
    - "4200:80" # <-- second port must match nginx image's port
    depends_on:
    - backend

Директива EXPOSE на первом этапе полностью игнорируется, и вы можете удалить ее. Строка FROM nginx приводит к тому, что docker build в основном полностью начинается с нового базового образа, поэтому ваше окончательное изображение - это исходное Nginx плюс файлы, которые вы COPY --from=builder.

...