小编ade*_*asi的帖子

为什么jar执行的通配符在docker CMD中不起作用?

我有Dockerfile以下内容CMD来启动我的春季启动应用程序:

FROM java:8-jre
# ...
CMD ["java", "-jar", "/app/file*.jar"]
Run Code Online (Sandbox Code Playgroud)

当我尝试从创建的图像启动容器时,我得到:

Error: Unable to access jarfile /app/file*.jar
Run Code Online (Sandbox Code Playgroud)

但是当我重写CMD启动容器并在容器中执行命令时,一切正常:

docker run -it <imageId> bash
root@<containerId>:/app# java -jar /app/file*.jar
<spring boot app starts...>
Run Code Online (Sandbox Code Playgroud)

是否可以使用通配符和java -jar命令使用docker CMD?请不要告诉我不要使用通配符.我想用它原因;-)

更新 根据答案,我能够解决它:

CMD ["/bin/sh", "-c", "java -jar /app/file*.jar"]
Run Code Online (Sandbox Code Playgroud)

java spring docker spring-boot

7
推荐指数
2
解决办法
2570
查看次数

为什么当我开始读取 InputStreamResource 时它会关闭?

我有一个 MongoDB,它存储一个 csv 文件和两个微服务(Spring Boot 应用程序)。一个微服务处理文件上传并支持将这些文件作为流获取。另一个微服务处理文件。这些微服务是分开的,因为我可能想稍后以另一种方式存储文件而不是在 MongoDB 中,我不想因此影响其他服务。

我的问题是,当文件服务将文件作为 InputStreamResource 返回时,如下所示:

@RequestMapping(value = "/upload/{importId}", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<InputStreamResource> getUploadedFile(@PathVariable("importId") String importId)
        throws ImportFileNotFoundException {
    GridFSDBFile file = FileImportClient.getInstance().getFile(importId);

    return ResponseEntity
            .ok()
            .contentLength(file.getLength())
            .body(new InputStreamResource(file.getInputStream()));
}
Run Code Online (Sandbox Code Playgroud)

我想从它已经关闭的流中读取。

ResponseEntity<InputStreamResource> response = restTemplate
            .getForEntity("http://upload-service/upload/" + importId, InputStreamResource.class);
BufferedReader fileReader = new BufferedReader(new InputStreamReader(response.getBody().getInputStream()));
for (CSVRecord record : CSVFormat.DEFAULT.parse(fileReader)) {/*toStuff()*/}
Run Code Online (Sandbox Code Playgroud)

我得到了java.io.IOException: Stream closed由 parse 方法引起的。

如果我只是curl localhost:<port>/upload/<importId>得到整个 csv 文件。有谁知道,为什么 InputStream 被关闭以及如何解决这个问题?

堆栈跟踪:

java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170)
at …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc mongodb

2
推荐指数
1
解决办法
5425
查看次数

如何在Kubernetes中获取容器的磁盘使用情况(无docker命令)?

我有一个Kubernetes集群,想知道我的容器使用多少磁盘空间。我不是在谈论已安装的卷。

我可以通过使用docker命令(例如docker system df -v或)来获取此信息docker ps -s,但我不想连接到每个工作节点。

有没有办法通过获取容器的磁盘使用率,kubectl还是有kubelet指标可以从中获取此信息?

kubernetes prometheus kubectl

2
推荐指数
2
解决办法
1884
查看次数

如何识别Kubernetes中未使用的秘密?

我想重命名我的k8s Secrets并想检查是否有未使用的Secrets.另外我想知道有多少和哪些containers参考了Secret.

有没有比在所有部署中搜索机密名称更简单的方法?

kubernetes kubectl

1
推荐指数
2
解决办法
1137
查看次数