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