提问人:Ravi 提问时间:10/27/2023 最后编辑:Ravi 更新时间:11/3/2023 访问量:32
在 Docker 容器中运行的 Java 应用程序无法读取网络共享位置中的文件
Java Application running in Docker container unable to read file in network shared location
问:
到目前为止,我的 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. 是否可以将远程路径映射/绑定到卷?
答:
0赞
Ravi
11/3/2023
#1
问题解决了更正docker-compose卷的问题,如下所示。 再一次,这里的邮件问题是Docker容器无法访问网络文件,映射卷并将文件访问为本地,解决了问题。 应用卷: driver_opts: 类型:CIFS 设备:“//myserver.com/share” o: addr=myserver.com,用户名=FileUser,密码=myPWD
谢谢
评论