Java的NIO内存映射docker装入文件失败

我最近运行到docker,并将我的Java应用程序部署到tomcat泊坞窗容器。 但是我遇到了一个关于NIO内存映射文件的非常具体的错误:

File mark = new File("/location/to/docker/mounted/file"); m_markFile = new RandomAccessFile(mark, "rw"); MappedByteBuffer m_byteBuffer = m_markFile.getChannel().map(MapMode.READ_WRITE, 0, 20); 

最后一个函数调用失败,如下所示:

 Caused by: java.io.IOException: Invalid argument at sun.nio.ch.FileChannelImpl.map0(Native Method) at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:906) at com.dianping.cat.message.internal.MessageIdFactory.initialize(MessageIdFactory.java:127) at com.dianping.cat.message.internal.DefaultMessageManager.initialize(DefaultMessageManager.java:197) ... 34 more 

我不知道发生了什么事。 我在我的Mac环境中testing过,没关系。 在tomcat docker容器中,我将文件位置更改为正常的文件path,也没关系。 看来只发生在docker安装的文件。

其他信息:

 root@4520355ed3ac:/usr/local/tomcat# uname -a Linux 4520355ed3ac 4.4.27-boot2docker #1 SMP Tue Oct 25 19:51:49 UTC 2016 x86_64 GNU/Linux 

将Mac用户的文件夹安装到/ data

 root@4520355ed3ac:/usr/local/tomcat# df Filesystem 1K-blocks Used Available Use% Mounted on none 18745336 6462240 11292372 37% / tmpfs 509832 0 509832 0% /dev tmpfs 509832 0 509832 0% /sys/fs/cgroup Users 243924992 150744296 93180696 62% /data /dev/sda1 18745336 6462240 11292372 37% /etc/hosts shm 65536 0 65536 0% /dev/shm 

docker版本

 huanghaideMacBook-Pro:cat huanghai$ docker --version Docker version 1.12.3, build 6b644ec huanghaideMacBook-Pro:cat huanghai$ docker-machine --version docker-machine version 0.8.2, build e18a919