在 Docker 容器中运行的 Java 应用程序无法读取网络共享位置中的文件

Java Application running in Docker container unable to read file in network shared location

提问人:Ravi 提问时间:10/27/2023 最后编辑:Ravi 更新时间:11/3/2023 访问量:32

问:

到目前为止,我的 java 应用程序在服务器上运行,该服务器正在从共享网络位置读取数据文件并将数据成功导入数据库。我们现在将此应用程序迁移到 Docker。代码中的文件读取操作中的步骤不考虑有效的文件位置。 Java 正在使用 File f = new File(“//fileserver/shared”) 下一步 f.exists() 当此代码在容器中运行时返回 null。过去,非 Docker 环境在此步骤中没有问题。Docker-compose

version: '3'
services:
    app-batch:
        dns: xx:xx:x:x
        container_name: app-batch
        hostname: apphost
        build:
            context: ./app-batch
            dockerfile: Dockerfile
        image: app-batch:1.0
        ports:
            - 8989:8989
        networks:
            - app-network
        volumes:
            - ./logs:/logs:rw

networks:
    app-network:
        driver: bridge
volumes:
    logs:

/app-batch 文件夹中的 Dockerfile

FROM openjdk:17-alpine

COPY ./*.jar myapp.jar

ENTRYPOINT ["java","-jar","/myap.jar"]

尝试在 docker-compose 中使用名为 appvolume 的卷,并且 卷:

  appvolume:
    driver: local
    driver_opts:
      type: cifs
      o:sec=ntlm,vers=3.0
      device: "//fileserver/shared"

但不断看到错误,例如无法到达主机。

app.jar 中的 Java 程序将网络文件内容读取为 文件 f =新文件(“//文件服务器/共享/加载文件.txt”); 并且不将文件 f 视为文件。

问:是否可以从主机上的应用程序网络上运行的 docker 容器连接到远程服务器? 如果默认情况下不可能,您能建议如何实现这一目标吗? Q. 是否可以将远程路径映射/绑定到卷?

Java 文件 网络 docker-compose

评论

0赞 Toby Speight 10/27/2023
您没有包含失败程序的最小可重现示例
0赞 Ravi 10/27/2023
多做一些步骤编辑,compose 和 docker 文件是一样的,我可以添加什么信息?
0赞 Toby Speight 10/28/2023
问题中没有实际的程序。如果没有失败程序的最小可重现示例,我们就无法解决编程问题。(如果您的问题出在运行时环境中 - 例如您的 Docker 容器 - 那么 Stack Overflow 可能不是寻求帮助的正确位置)。

答:

0赞 Ravi 11/3/2023 #1

问题解决了更正docker-compose卷的问题,如下所示。 再一次,这里的邮件问题是Docker容器无法访问网络文件,映射卷并将文件访问为本地,解决了问题。 应用卷: driver_opts: 类型:CIFS 设备:“//myserver.com/share” o: addr=myserver.com,用户名=FileUser,密码=myPWD

谢谢