无法从主机连接到dockerized Vue CLI服务

时间:2019-06-18 03:36:48

标签: docker vue.js vuejs2 docker-compose 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 create foo创建一个Vue项目。

在项目文件夹中,我添加了一个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本地托管的,但这似乎是a known display bug

但是,我无法从主机通过http://localhost:8080到达Vue。

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

2 个答案:

答案 0 :(得分:1)

我没有意识到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服务添加command作为vue-cli可以确保它立即在docker-compose up上摆脱困境。)

答案 1 :(得分:0)

使用docker-compose up代替docker-compose run,默认情况下,up不会暴露端口(如您所注意到的那样)

  

runstart和{{1}}有什么区别?

     

通常,您需要docker-compose起来。用完启动或重新启动docker-compose.yml中定义的所有服务。在默认的“附加”模式下,您会看到来自所有容器的所有日志。在“分离”模式(-d)中,启动容器后Compose退出,但是容器继续在后台运行。

     

docker-compose run命令用于运行“一次性”或“临时”任务。它需要您要运行的服务名称,并且仅启动正在运行的服务所依赖的服务的容器。使用运行来运行测试或执行管理任务,例如将数据删除或添加到数据卷容器。 run命令的行为类似于docker run -ti,它打开了容器的交互式终端,并返回与容器中进程的退出状态匹配的退出状态。

     

docker-compose start命令仅对重新启动先前创建但已停止的容器有用。它永远不会创建新的容器。

src:https://docs.docker.com/compose/faq/