使用已安装docker的Ubuntu Linux。没有虚拟机。
我已经用vuejs应用程序构建了一个docker镜像。要启用热重载,我使用以下命令启动docker容器:
docker run -it -p 8081:8080 -e "HOST=0.0.0.0" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
启动正常,我可以从localhost:8081
上的主机浏览器访问它。但是,当我对源文件进行更改并保存这些更改时,在按F5键之前它们不会反映在我的浏览器中(热重装不起作用)。
以下一些详细信息:
package.json
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js","start": "npm run dev",
build / webpack.dev.conf.js
devserver: {
clientLogLevel: 'warning',...
hot: true,...
watchOptions: {
//poll: config.dev.poll,//aggregateTimeout: 500,// delay before reloading
poll: 100 // enable polling since fsevents are not supported in docker
}
试图修改 watchOptions ,但无效。
编辑:
基于以下答案,我尝试传递:CHOKIDAR_USEPOLLING=true
作为docker run的环境变量:
docker run -it -p 8081:8080 -e "HOST=0.0.0.0" -e "CHOKIDAR_USEPOLLING=true" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
但是它没有效果-仍然无法热装我的更改。还在提供的链接中显示:
更新/说明:仅当您运行 VM内部的Docker引擎。如果您同时使用Linux和Docker 编码您没有这个问题。
所以不要认为答案适用于我的设置-我在安装了docker的计算机上运行Ubuntu Linux。因此无需VM安装程序。
另一个更新-基于以下有关更改端口映射的评论:
# Hot reload works!
docker run -it -p 8080:8080 -e "HOST=0.0.0.0" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
# Hot reload fails!
#docker run -it -p 8081:8080 -e "HOST=0.0.0.0" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
因此,如果我将端口映射到8080:8080
而不是8081:8080
,那么热装就可以了!请注意,在上述两种情况下,当我通过localhost
的主机浏览器访问应用程序时,应用程序都会启动。只是当我将应用程序映射到主机上的8080时,热加载才起作用。
但是为什么?
现在,如果我这样做:
PORT='8081'
docker run -it -p "${PORT}:${PORT}" -e "HOST=0.0.0.0" -e "PORT=${PORT}" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image
热重装当然有效。但是仍然不确定为什么我不能在主机上从外部将内部容器端口8080映射到8081。
顺便说一句;如果我改用vue-cli-service serve
,就根本看不到问题了-一切开箱即用。