Docker -compose: как обмениваться данными между службами без использования именованных томов или многоступенчатых сборок - PullRequest
1 голос
/ 20 января 2020

Существуют ли способы обмена данными между контейнерами. Существует следующий docker -компонентный файл

version: '3'
services:
    app_build_prod:
        container_name: 'app'
        build:
            context: ../
            dockerfile: docker/Dockerfile
            args:
                command: build:prod
    nginx:
        container_name: 'nginx'
        image: nginx:alpine
        ports:
            - "80:80"
        depends_on:
            - app_build_prod

Содержимое Dockerfile:

FROM node:10-alpine as builder

## Installing missing packages, fixing git self signed certificate issue
RUN apk update && apk upgrade && \
    apk add --no-cache bash git openssh && \
    rm -rf /var/cache/apk/* && \
    git config --global http.sslVerify false

## Defigning app directory
WORKDIR /usr/app

## Copying files. Files listed in .dockerignore are omitted
COPY . .

## node_modules are on a separate intermediate image will prevent unnecessary npm installs at each build
RUN npm ci

## Declaring arguments and environment variables. Important to declara env var to consume them on run stage
ARG command=build:prod
ENV command=$command
ENTRYPOINT npm run ${command}

Попробовано с помощью решения @ Robert's , но не удалось заставить его работать - контейнер приложения падает из-за:

EBUSY: ресурс занят или заблокирован, rmdir '/ usr / app / dist
Ошибка: EBUSY: ресурс занят или заблокирован, rmdir' / usr / app / dist '

Я предполагаю, что каталог /usr/app/dist монтируется с доступом только для чтения, поэтому, когда Angular пытается удалить его перед сборкой, он выдает ошибку.

Необходимо отправить данные в следующем направлении

app_build_prod:/usr/app/dist => nginx:/usr/share/nginx/html

1 Ответ

0 голосов
/ 21 января 2020

У меня та же проблема, и меняю общий доступ, чтобы использовать многоэтапный сборка:

FROM alpine:latest AS builder
...build app_build_prod 

FROM nginx:alpine  
COPY --from=builder /usr/app/dist /usr/share/nginx/html

и изменить docker -составить на:

version: '3'
services:
    nginx:
        container_name: 'nginx'
        build:
             ...
        ports:
            - "80:80"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...