【问题标题】:Can't run vue using docker-compose - can't find package.json无法使用 docker-compose 运行 vue - 找不到 package.json
【发布时间】:2020-04-25 23:26:37
【问题描述】:

我无法使用 Docker 和 docker-compose 运行我的 Vue 应用程序。所有其他应用程序和服务都在运行(一些 .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

还有我用于 vue-app 的 Docker 文件:

# 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)

我错过了什么吗?

【问题讨论】:

  • 看看这个类似的post

标签: docker vue.js npm


【解决方案1】:

问题出在你的docker-compose.yaml 文件中,你有这一行:

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

在这里,您只是用当前目录的内容覆盖了容器内/app 目录(包含package.json 文件的目录)的所有内容。
这就是为什么你有错误告诉你该文件不存在。

【讨论】:

猜你喜欢
  • 2019-08-30
  • 1970-01-01
  • 2021-02-18
  • 2022-09-05
  • 1970-01-01
  • 2018-09-04
  • 2020-07-16
  • 2019-08-28
  • 1970-01-01
相关资源
最近更新 更多