gpt4 book ai didi

java - 如何从 docker 容器内的输入文件中读取

转载 作者:行者123 更新时间:2023-12-04 09:06:13 24 4
gpt4 key购买 nike

我在 docker 容器中运行了一个简单的 java 程序。
我在 windows 上使用了 Eclipse - 但我创建了 linux 容器(使用 windwos docker 桌面)
我使用 Powershell 启动容器
镜像创建成功
我看到了这个帖子,但它没有帮助我c++ program with docker .使用该答案中的解决方案时出现错误。

PS E:\Java\Test> docker run -v E:\Java\Test:\tt img \tt\in.txt
docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:”\\tt\\in.txt“:$PATH 中找不到可执行文件”:未知。
Dockerfile
FROM java:8
COPY hello.jar app.jar
CMD ["java", "-jar", "app.jar", "pkg.hello"]



public static void main(String[] args) throws Exception {
String fileName ="E:\\Java\\Test\\in.txt";
List<String> lines = Collections.emptyList();
lines = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);
Iterator<String> itr = lines.iterator();
while (itr.hasNext())
System.out.println(itr.next());
}
任何想法,谢谢

最佳答案

新的 Docker 文件

FROM java:8

COPY hello.jar app.jar

ENTRYPOINT ["java", "-jar", "app.jar", "pkg.hello"]
好的,经过大量试验和错误后,我找到了一种解决方案,可能不止一种。我想为像我这样不是很专业的人解释一下,
正如我们所知,docker 在容器内制作了一个类似于迷你操作系统的东西,我的意思是所需的库和文件 + 我们开发的应用程序。在 docker 中运行时,我尝试运行并查看目录中的内容。通过在 Windows 上的 Eclipse 上运行,它会显示常规路径 E:\Java\.... . 但是当我在 docker 上运行它时,它只显示“/”。 然后我试图查看内容。在 Windows 上,当前目录中的文件和文件夹,但 在 docker 上,它显示了一些与 LINUX 根路径文件夹、bin sbin mnt proc 等相同的文件夹。所以我意识到有一个mini linux。我知道这个事实,但从未见过这个结果。所以很明显 in.txt 在 docker 文件系统中不存在。 现在我们看到了像-v这样的docker特性。 它允许我们将一个目录从主机(即 windows)复制/粘贴到 docker 容器文件系统。运行此命令后,我看到一个名为 data 的新文件夹已添加到 docker 文件夹中
docker run -v ${pwd}:/data img
pwd(Win 上的当前目录)的全部内容与 in.txt 一起复制到数据目录。现在我的 java 程序应该在 docker 内运行,所以我需要更改硬编码路径。
String fileName ="data//in.txt"; 
肯定它在 Windows 上不起作用,因为我的文件夹中没有\data\in.txt。
无论如何,我可以通过获取一些参数并跳过硬代码来做到这一点。有很多方法。我添加了代码以查看目录状态,您可能想尝试一下。
String d = System.getProperty("user.dir");
File f = new File(d);
File filesList[] = f.listFiles();
for(File file : filesList) {
System.out.println("File name: "+file.getName());
System.out.println("File path: "+file.getAbsolutePath());
if (file.getName().equals("data")==true)
{
File filesList2[] = file.listFiles();
for(File file2 : filesList2) {
System.out.println("File name: "+file2.getName());
System.out.println("File path: "+file2.getAbsolutePath());
}

}
System.out.println(" ");
}

关于java - 如何从 docker 容器内的输入文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63442283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com