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

Posted

技术标签:

【中文标题】无法从主机连接到 dockerised Vue CLI 服务【英文标题】:Unable to connect to dockerised Vue CLI service from host 【发布时间】:2019-10-31 15:29:02 【问题描述】:

我有一个非常基本的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 开发服务器。

【问题讨论】:

vue-cli 服务器用于开发。您是否有理由更喜欢使用它而不是推荐的 nginx 或类似 express/hapi 服务器的东西? 我正在尝试将其用于本地开发 【参考方案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 并轻松获得外壳,而所有内容的服务都由专门的服务完成。 (为vue-cli 服务添加echo 作为command 可确保它立即退出docker-compose up。)

【讨论】:

【参考方案2】:

使用docker-compose up 而不是docker-compose run,默认情况下不会公开端口(如您所见)

uprunstart 有什么区别?

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

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

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

源代码:https://docs.docker.com/compose/faq/

【讨论】:

run 绝对是我在 atm 之后的行为 还不错,我在阅读描述时错过了它,我认为它可能会对遇到相同问题的其他人有所帮助

以上是关于无法从主机连接到 dockerised Vue CLI 服务的主要内容,如果未能解决你的问题,请参考以下文章

出于开发目的,无法从本地主机连接到 AWS RDS Postgresql

无法从 docker windows 容器中的 asp.net 核心应用程序连接到主机数据库

vcenter克隆无法连接到主机

无法从主机连接到 ZooKeeper/Hive 到 Sandbox Hortonworks HDP VM

无法从主机虚拟机连接到mysql

Springboot 应用程序无法使用 docker-compose 连接到 MongoDB 容器