Docker - 无法在java中的卷之间移动文件

时间:2016-08-28 15:28:18

标签: java docker docker-compose

我有两个泊坞容器:生产者和消费者。

消费者容器有两个卷:

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'));

当我尝试从命令行移动文件时,没有错误。文件正确移动。为什么会这样?我怎样才能诊断出问题所在?

2 个答案:

答案 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(); }