【问题标题】:Docker - cannot move file between volumes from javaDocker - 无法在 java 的卷之间移动文件
【发布时间】:2016-08-28 15:28:17
【问题描述】:

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

消费者容器有两个卷:

VOLUME      ["/opt/queue/in", "/opt/queue/out"]

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

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

【问题讨论】:

    标签: java docker docker-compose


    【解决方案1】:

    The javadoc for File.renameTo 明确表示它可能无法在不同卷之间移动文件,如果您需要以独立于平台的方式支持这种情况,则应使用 Files.move。

    【讨论】:

      【解决方案2】:

      如上所述,重命名方法不适用于 docker mount,因此如果您使用的是 java6 等旧版本的 java,请使用此复制文件。 java8有很多方法可以移动文件

      try { 
            FileUtils.copyFile(oldfile,newfile);
         } catch (Exception e) { e.printStackTrace(); }
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-21
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-28
        • 2021-03-01
        • 1970-01-01
        相关资源
        最近更新 更多