如何容器化 Vue.js 应用程序?

Posted

技术标签:

【中文标题】如何容器化 Vue.js 应用程序?【英文标题】:How to Containerize a Vue.js app? 【发布时间】:2018-09-20 08:03:21 【问题描述】:

我无法在 Chrome 中通过 http://172.17.0.2:8080/ 本地访问该站点,我收到“172.17.0.2 响应时间过长”。

我使用inspect命令获取了容器的IP地址。

docker inspect -f 'range .NetworkSettings.Networks.IPAddressend e83c95d05d63

我使用的运行命令。

docker run -it -p 8080:8080 --name portfolio-vue portfolio-vue:v1

还有我的 Dockerfile

FROM node:7.7-alpine

ADD package.json /tmp/package.json
RUN cd /tmp && npm install

RUN mkdir -p /opt/portfolio-vue && cp -a /tmp/node_modules /opt/portfolio-vue-app

WORKDIR /opt/portfolio-vue
COPY . /opt/portfolio-vue

EXPOSE 8080
CMD ["npm", "start"]

【问题讨论】:

【参考方案1】:

在默认的 vue-cli 设置中,npm start(您正在使用的命令)运行 npm run dev

同样,默认情况下,npm run dev 仅绑定到本地主机。

--host 0.0.0.0 添加到package.json 中的webpack-dev-server 行,以便您可以从外部 docker 容器访问它:

来自类似的东西:

  "scripts": 
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",

类似于 (add --host 0.0.0.0):

    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 0.0.0.0",

注意:我假设,因为您使用了CMD ["npm", "start"],您正在创建一个用于开发或调试目的的容器。如果您的目标是生产,您真的应该考虑生成捆绑包 (npm run build) 并直接在像 nginx 这样的 HTTP 服务器上提供生成的文件(也可以在 docker 中创建)。

【讨论】:

注意这个方案不是绑定所有地址的,只绑定ipv4的,你基本上排除了大半的互联网 在较新的 webpack 版本中,你有 --disable-host-check,但是,在当前的 vue-cli 中,--host 0.0.0.0 是最好的。有人可能会尝试用 IPv6 等价物替换 0.0.0.0,但我从未这样做过,也无法保证是否有效。

以上是关于如何容器化 Vue.js 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 前端项目容器化部署实践极简教程

Vue.js 前端项目容器化部署实践极简教程

如何在 Vue.js 中显示 Firebase 数组项

带有热重载的 docker 容器上的 Vue.js 应用程序

前端表单进阶之路:通过 Vue.js 实现表单可配置化

如何在 Vue.js 中将实例化的 Vue 组件作为道具传递?