Docker kurulu halde Ubuntu Linux kullanma. VM yok.
Bir vuejs uygulaması ile bir liman işçisi görüntü inşa var. Etkin yeniden yüklemeyi etkinleştirmek için docker kapsayıcısını aşağıdakilerle başlatırım:
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
İyi başlıyor ve ana bilgisayarımın tarayıcısından erişebiliyorum localhost:8081
. Ancak kaynak dosyalarda değişiklik yaptığımda ve bu değişiklikleri kaydettiğimde, F5'e basmadan önce tarayıcımda yansıtılmıyorlar (sıcak yeniden yükleme çalışmıyor).
Aşağıda bazı ayrıntılar:
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 üzerinde değişiklik yapmaya çalıştı ancak hiçbir etkisi yok.
DÜZENLE:
Aşağıdaki cevaba dayanarak geçmeye çalıştım: CHOKIDAR_USEPOLLING=true
docker çalıştırmak için bir ortam değişkeni olarak:
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
Ama etkisi yok - yine de değişikliklerimi sıcak olarak yükleyemiyorum. Ayrıca sağlanan bağlantıda şöyle diyor:
Güncelleme / Açıklama: Bu sorun yalnızca Docker motorunuzu bir VM içinde çalıştırırken oluşur. Hem Docker hem de kodlama için Linux'taysanız bu sorunla karşılaşmazsınız.
Bu yüzden cevabın kurulumum için geçerli olduğunu düşünmeyin - Ubuntu Linux'u docker'ı kurduğum makinede çalıştırıyorum. Yani VM kurulumu yok.
Başka bir güncelleme - bağlantı noktası eşlemesini değiştirme hakkındaki aşağıdaki yoruma dayanarak:
# 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
Yani ben bağlantı noktası harita 8080:8080
yerine 8081:8080
sıcak yeniden yükleme çalışır! Daha localhost
önce belirtilen bağlantı noktalarında ana bilgisayar tarayıcımda eriştiğimde uygulamanın her iki durumda da geldiğine dikkat edin . Sadece o sıcak yeniden yükleme sadece benim ev sahibi 8080 için uygulama harita çalışır.
Ama neden??
Şimdi yaparsam:
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
Sıcak yeniden yükleme tabii ki çalışır. Ama neden 8080 ile 8081 arasındaki dahili konteyner bağlantı noktasını ana bilgisayarda harici olarak eşleyemiyorum.
btw; Bunun vue-cli-service serve
yerine kullanırsam sorunu hiç görmüyorum - her şey kutudan çıkıyor .
-p 8080:8080 -p 8081:8081