Не удается запустить vue с использованием docker -compose - не удается найти пакет. json - PullRequest
0 голосов
/ 08 января 2020

Я не могу запустить свое приложение Vue, используя Docker и docker -compose. Все остальные приложения и службы работают (несколько приложений NET, nginx -proxy и letsencrypt- nginx -proxy-companion), но при запуске приложения vue появляется следующее сообщение об ошибке:

| npm ERR! path /app/package.json
| npm ERR! code ENOENT
| npm ERR! errno -2
| npm ERR! syscall open
| npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
| npm ERR! enoent This is related to npm not being able to find a file.

Вот так выглядит мой docker -compose.yaml:

version: "3.7"

services:
  nginx-proxy:
    image: jwilder/nginx-proxy:latest
    container_name: nginx-proxy
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - /var/run/docker.sock:/tmp/docker.sock:ro
        - /var/lib/docker/volumes/certs/_data:/etc/nginx/certs:ro
        - /var/lib/docker/volumes/vhost/_data:/etc/nginx/vhost.d
        - /var/lib/docker/volumes/html/_data:/usr/share/nginx/html
        - /var/lib/docker/volumes/config/_data:/etc/nginx/conf.d
        - /var/lib/docker/volumes/nginx/_data:/etc/init.d/
    depends_on:
      - app1
      - app2
      - vue-app
  nginx-proxy-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-proxy-letsencrypt
    environment:
        - DEFAULT_EMAIL=mail@mail.com
        - NGINX_PROXY_CONTAINER=nginx-proxy
    depends_on:
      - nginx-proxy
    volumes:
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - /var/lib/docker/volumes/certs/_data:/etc/nginx/certs:rw
        - /var/lib/docker/volumes/vhost/_data:/etc/nginx/vhost.d
        - /var/lib/docker/volumes/html/_data:/usr/share/nginx/html
  app1:
    image: user/app1:latest
    environment:
        - VIRTUAL_HOST=example.com,www.example.com
        - LETSENCRYPT_HOST=example.com,www.example.com
    volumes:
        - /var/lib/docker/volumes/sqllite/_data:/app/data
        - /var/lib/docker/volumes/uploadfolder/_data:/app/wwwroot/uploads
  app2:
    build: ~/app_2
    environment:
        - VIRTUAL_HOST=app2.example.com,www.app2.example.com
        - LETSENCRYPT_HOST=app2.example.com,www.app2.example.com
  vue-app:
    build: ~/vue_app
    environment:
        - VIRTUAL_HOST=vueapp.example.com,www.vueapp.example.com
        - LETSENCRYPT_HOST=vueapp.example.com,www.vueapp.example.com
    volumes:
        - .:/app
        - /app/node_modules
volumes:
  certs:
  vhost:
  html:   
networks:
  default:
    external:
      name: nginx-proxy

И мой Docker файл для vue -app:

# base image
FROM node:12.2.0-alpine

# 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 package.json /app/package.json
RUN npm install
RUN npm install @vue/cli@3.7.0 -g

# start app
CMD ["npm", "run", "serve"]

Файловая структура на моем сервере:

root   
| docker-compose.yaml
|
|__app_2
|  Dockerfile (in the project root)
|
|__vue_app
   Dockerfile (in the project root)

Я что-то упустил?

1 Ответ

3 голосов
/ 08 января 2020

Проблема в вашем файле docker-compose.yaml, у вас есть эта строка:

vue-app:
    ...
    volumes:
        - .:/app

Здесь вы просто переопределяете все содержимое каталога /app внутри вашего контейнера (тот, который содержит package.json file) с содержимым вашего текущего каталога.
Вот почему у вас есть ошибка, сообщающая, что файл не существует.

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