我有两个泊坞容器:生产者和消费者。
消费者容器有两个卷:
VOLUME ["/opt/queue/in", "/opt/queue/out"]
搬运工-compose.yml
consumer:
image: consumer
producer:
image: producer
volumes_from:
- consumer
生产者将文件放入/opt/queue/in
目录,消费者从该目录读取文件并将其移至/opt/queue/out
。问题是消费者是用Java编写的,并且遵循Java代码返回-1
(操作失败)。
new File('/opt/queue/in/in_file').renameTo(new File('/opt/queue/in/in_file'));
当我尝试从命令行移动文件时,没有错误。文件正确移动。为什么会这样?我怎样才能诊断出问题所在?
答案 0 :(得分:5)
The javadoc for File.renameTo明确表示它可能无法在不同卷之间移动文件,并且如果您需要以独立于平台的方式支持此案例,则应使用Files.move。
答案 1 :(得分:0)
如上所述,重命名方法在Docker挂载上将不起作用,因此,如果您使用的是Java6等旧版本的Java,则可以使用此复制文件。 java8有很多移动文件的方法
try {
FileUtils.copyFile(oldfile,newfile);
} catch (Exception e) { e.printStackTrace(); }