Как собрать vue-проект в docker-compoce

Структура проекта:

-- project
----> configs // Конфиги сборки докера
------> application
-------- Dockerfile
-------- php-fpm.conf
------> nginx
-------- Dockerfile
-------- php-fpm.conf
------> nodejs
-------- Dockerfile
-- databases // Базы дынных
-- production // Код проетка (PHP + VUE)
-- .env
-- .env.example
-- docker-compose.yml
-- README.md

dockerfile сервиса nodejs:

FROM node:lts-alpine as front

WORKDIR /var/www/project/production/frontend

VOLUME ["/var/www/project/production/frontend"]

RUN apk add --no-cache bash

RUN npm install -g @vue/cli

RUN npm install
RUN npm run build

Сервис:

  # NODEJS - Service
  nodejs:
    build: configs/nodejs
    container_name: nodejs_container
    depends_on:
      - application

Почему при выполнении docker-compose build в контейнер не примонтировалась директория /var/www/project/production/frontend(вывод команды ls -la)?

Соответственно не собирается проект из-за отстутствия файла package.json.


Ответы (1 шт):

Автор решения: Не быть рабом на Руси
  • Чтобы Docker примонтировал(binding) дирикторию необходимо при запуске контейнера передать путь к директории на хосте(локальная машина), которую будем монтировать и путь где будет эта директория в контейнере. Пример: -v /var/www/my-site:/var/www/my-site или --volume /var/www/my-site:/var/www/my-site;

  • Дополняем image node:lts-alpine:

FROM node:lts-alpine
RUN npm install -g @vue/cli
  • Описываем сервис в docker-compose.yml:
version: '3'

services:
# NODEJS - Service
  nodejs:
    build: configs/nodejs
    container_name: nodejs_container
    volumes:
      - /var/www/my-site:/var/www/my-site
    working_dir: /var/www/my-site
    command: sh init.sh
  • Когда поднимим контаинер выполнится скрипт:
npm install
npm run build
→ Ссылка