无法从主机连接到 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
,默认情况下不会公开端口(如您所见)
up
、run
和start
有什么区别?通常,您需要 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 核心应用程序连接到主机数据库