Sử dụng Ubuntu Linux với docker được cài đặt. Không có VM.
Tôi đã xây dựng một hình ảnh docker với một ứng dụng vuejs. Để kích hoạt tải lại nóng, tôi khởi động container docker bằng:
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
Nó khởi động tốt và tôi có thể truy cập nó từ trình duyệt máy chủ của mình trên đó localhost:8081
. Nhưng khi tôi thực hiện thay đổi cho các tệp nguồn và lưu những thay đổi đó, chúng không được phản ánh trong trình duyệt của tôi trước khi tôi nhấn F5 (tải lại nóng không hoạt động).
Một số chi tiết dưới đây:
pack.json
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
xây dựng / 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
}
Đã cố gắng sửa đổi watchOptions nhưng nó không có hiệu lực.
BIÊN TẬP:
Dựa trên câu trả lời dưới đây, tôi đã cố gắng vượt qua: CHOKIDAR_USEPOLLING=true
như một biến môi trường để chạy docker:
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
Nhưng nó không có hiệu lực - vẫn không thể tải lại các thay đổi của tôi. Cũng trong liên kết được cung cấp, nó nói:
Cập nhật / Làm rõ: Sự cố này chỉ xảy ra khi chạy công cụ Docker của bạn bên trong máy ảo. Nếu bạn đang dùng Linux cho cả Docker và mã hóa thì bạn không gặp vấn đề này.
Vì vậy, đừng nghĩ câu trả lời áp dụng cho thiết lập của tôi - Tôi đang chạy Ubuntu Linux trên máy của mình, nơi tôi đã cài đặt docker. Vì vậy, không có thiết lập VM.
Một cập nhật khác - dựa trên nhận xét bên dưới về việc thay đổi ánh xạ cổng:
# 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
Vì vậy, nếu tôi port map sang 8080:8080
thay vì 8081:8080
tải lại hoạt động! Lưu ý rằng ứng dụng xuất hiện trong cả hai trường hợp khi tôi truy cập nó trên trình duyệt máy chủ của mình localhost
trên các cổng được đề cập trước đó. Nó chỉ tải lại nóng chỉ hoạt động khi tôi ánh xạ ứng dụng tới 8080 trên máy chủ của mình.
Nhưng tại sao??
Bây giờ nếu tôi làm:
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
Tải lại nóng tất nhiên hoạt động. Nhưng vẫn không chắc chắn lý do tại sao tôi không thể ánh xạ cổng container bên trong 8080 đến 8081 bên ngoài máy chủ.
Btw; Tôi không thấy vấn đề gì cả nếu tôi sử dụng vue-cli-service serve
thay vì - mọi thứ hoạt động ra khỏi hộp .
-p 8080:8080 -p 8081:8081