'sbt~run'显示它正在重新编译,但没有可见的变化

时间:2015-12-10 19:39:01

标签: scala playframework docker sbt

我很新玩和scala,我面临一个小问题。 我用scala(以及其他所有东西)设置基于docker的VM。我的代码是通过卷来完成的。 我跑的时候

sbt ~run

第一次,一切都被编译和工作。但是,当我进行任何代码更改时,日志显示代码正在重新编译,但我没有看到我正在处理的应用程序中的任何更改。 如果我完全重新启动'sbt',那么更改就会完成。

这可能是什么原因? 我确保我只运行'sbt'的一个实例:

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  48828  6900 ?        Ss   17:16   0:01 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
root         8  0.0  0.1  19752  2792 ?        Ss   17:18   0:00 bash
root        23  0.0  0.1  47588  2648 ?        S    17:21   0:00 sudo su
root        24  0.0  0.1  48204  2288 ?        S    17:21   0:00 su
root        25  0.0  0.1  19748  3196 ?        S    17:21   0:00 bash
root      9231  0.0  0.1  11384  3236 ?        S+   19:26   0:00 bash /usr/bin/sbt ~run
root      9286 36.2 31.6 3009020 649292 ?      Sl+  19:26   4:48 java -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:MaxMetaspaceSize=256m -jar /usr/share/sbt-launcher-packaging/bin/sbt-launch.jar ~run
root      9351  0.0  0.1  19752  3616 ?        Ss   19:26   0:00 bash
root     11101  0.0  0.1  17172  2492 ?        R+   19:39   0:00 ps aux

我无法想到其他任何事情

谢谢,

1 个答案:

答案 0 :(得分:1)

Sbt使用JNotify来监视文件系统。最有可能的是,基于Docker的Sbt无法看到inotify事件(请参阅heredocker issue)。

在主机和docker容器之间共享数据的另一种常见方法是NFS,不幸的是doesn't support inotify either至少如果NFS服务器在主机上,则docker机器将看不到更改。

我猜你可以尝试在docker容器上安装一个NFS服务器并连接到主机上的NFS服务器。然后docker容器可能会看到文件修改。

另一种可能的选择是通过网络对rser进行更改,如docker问题中所述。

---编辑---

Docker 4 Mac使用特殊的FS,它将来自主机的通知事件传输到容器。目前它处于私人测试状态,但很快就会推出。