我很新玩和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
我无法想到其他任何事情
谢谢,
答案 0 :(得分:1)
Sbt使用JNotify来监视文件系统。最有可能的是,基于Docker的Sbt无法看到inotify事件(请参阅here和docker issue)。
在主机和docker容器之间共享数据的另一种常见方法是NFS,不幸的是doesn't support inotify either至少如果NFS服务器在主机上,则docker机器将看不到更改。
我猜你可以尝试在docker容器上安装一个NFS服务器并连接到主机上的NFS服务器。然后docker容器可能会看到文件修改。
另一种可能的选择是通过网络对rser进行更改,如docker问题中所述。
---编辑---
Docker 4 Mac使用特殊的FS,它将来自主机的通知事件传输到容器。目前它处于私人测试状态,但很快就会推出。