首页 > 解决方案 > 无法从主机连接到 dockerised Vue CLI 服务

问题描述

我有一个非常基本Dockerfile的安装Vue CLI和公开端口8080

FROM node

RUN yarn global add @vue/cli

EXPOSE 8080

我有一个docker-compose.yml将主机端口连接到容器上暴露的端口:

version: '3'

services:
  vue:
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - .:/home/node
    working_dir: '/home/node'
    ports:
      - '8080:8080'

我运行一个容器,docker-compose run vue bash然后创建一个 Vue 项目vue create foo

在项目文件夹中,我添加了一个vue.config.js

module.exports = {
  devServer: {
    host: '0.0.0.0',
    port: 8080
  }
}

当我运行开发服务器时,yarn serve我看到:

 App running at:
  - Local:   http://localhost:8080/

  It seems you are running Vue CLI inside a container.
  Access the dev server via http://localhost:<your container's external mapped port>/

虽然它显示它是在本地托管的,但这似乎localhost不是一个已知的显示错误0.0.0.0

但是,我无法通过http://localhost:8080主机访问 Vue。

我查看了多个设置此设置的教程,但无法弄清楚为什么我无法访问 Vue 开发服务器。

标签: dockervue.jsvuejs2docker-composevue-cli

解决方案


我没有意识到默认情况下docker-compose run没有设置定义的端口。docker-compose.yml这可以由docker-compose run --service-ports.

我已经确定了一个解决方案,我将运行 vue cli 命令和将开发服务器运行到单独的服务中:

version: '3'

services:
  vue-cli:
    build:
      context: .
      dockerfile: ./Dockerfile
    image: auscert/vue:latest
    volumes:
      - .:/home/node
    working_dir: '/home/node/demo'
    command: ['echo', 'Service vue-cli is run only']
  vue:
    image: auscert/vue:latest
    ports:
      - '8080:8080'
    volumes:
      - .:/home/node
    working_dir: '/home/node/demo'
    command: ['yarn', 'serve']

这让我仍然可以docker-compose run vue-cli一次性使用并轻松获得外壳,而所有内容的服务都由专门的服务完成。(为服务添加一个echo作为确保它立即退出一个。)commandvue-clidocker-compose up


推荐阅读