Sto provando a configurare un ambiente di sviluppo per lo sviluppo di un'applicazione di riproduzione in un contenitore mobile. Ho creato un'immagine con sbt installato. Ho poi mappare la cartella del progetto sul mio ospite al contenitore come un volume ed eseguire shell in modalità interattiva:Caricamento automatico del framework di riproduzione nel contenitore mobile
docker run -v /Users/jorgen/dev/play-sbt-docker/app:/data/app -w /data/app -p 9999:9000 -i -t jorgenfb/sbt /bin/bash
Ho poi avvia l'applicazione gioco eseguendo sbt ~run
. Il server di gioco inizia proprio trovare, si ricompila anche quando posso modificare il mio file sull'host:
[info] Compiling 1 Scala source to /data/app/target/scala-2.10/classes...
[success] Compiled in 2s
Il problema è che i cambiamenti non vengono visualizzati nel browser quando rinfresco. Non c'è nessun problema di memorizzazione nella cache poiché ho disabilitato il caching. Se eseguo l'applicazione dal mio host, tutto funziona correttamente.
Edit: Questo è il mio Dockerfile utilizzato per creare il contenitore con SBT:
FROM dockerfile/java:oracle-java8
MAINTAINER Jørgen Borgesen
ENV SBT_VERSION 0.13.5
# Install sbt
RUN cd /tmp && \
wget https://dl.bintray.com/sbt/native-packages/sbt/$SBT_VERSION/sbt-$SBT_VERSION.zip && \
unzip sbt-$SBT_VERSION.zip -d /usr/local && \
rm sbt-$SBT_VERSION.zip
ho fatto qualche ricerca più. All'interno del contenitore docker avvio l'applicazione di gioco in questo modo:
[ [email protected]:/data/app ]$ /usr/local/sbt/bin/sbt
[info] Loading project definition from /data/app/project
[info] Set current project to my-first-app (in build file:/data/app/)
[my-first-app] $ ~run
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Ctrl+D to stop and go back to the console...)
[success] Compiled in 740ms
Il caricamento della pagina nel browser funziona correttamente. Quindi cambio il mio file di indice sull'host. Questo si attiva ricompilare all'interno del contenitore:
[info] Compiling 1 Scala source to /data/app/target/scala-2.10/classes...
[success] Compiled in 1s
L'aggiornamento del browser mostra ancora il file indice iniziale. Anche se i cambiamenti sono stati imputati dall'applicazione di gioco all'interno del contenitore. Ho anche ispezionato i file compilati in target/scala-2.10/classes/views/html
(sul mio host, dal momento che sto eseguendo l'applicazione di riproduzione nel contenitore e non sono sicuro di come collegare più terminali ad esso). I file compilati sono cambiati.
La prossima cosa che ho fatto è stata premere Ctrl-D. Questo dovrebbe riportare la console alla sbt in base al messaggio stampato sopra "(Server avviato, utilizzare Ctrl + D per interrompere e tornare alla console ...)". Tuttavia, ciò risulta nell'output seguente:
[success] Total time: 455 s, completed Sep 25, 2014 7:40:35 AM
1. Waiting for source changes... (press enter to interrupt)
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Ctrl+D to stop and go back to the console...)
[info] play - Application started (Dev)
Ora le modifiche apportate in precedenza si riflettono nel browser dopo un aggiornamento.
Avete controllato se i cambiamenti e dei file aggiornati di modifica dei file date-stanno facendo attraverso al contenitore Docker? –
I file sono stati modificati, sia per l'origine che per le classi compilate. Ho anche fatto qualche ricerca in più (vedi modifica), ma non sono più vicino a una soluzione. – jorgenfb
Sono felice che tu abbia trovato una soluzione alternativa. Sfortunatamente penso che sia attualmente un problema difficile rilevare in modo affidabile le modifiche del filesystem dalla JVM. –