当前位置: 首页 > 知识库问答 >
问题:

Docker容器上的Java Runtime Exec的问题

端木野
2023-03-14

我正在尝试用GDAL包(用于ogr2ogr命令)对接一个Java应用程序

我的Dockerfile是:

FROM openjdk:10
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar

RUN apt-get update
RUN apt-get -y install python3-gdal
RUN apt-get -y install libgdal28
RUN apt-get -y install libgdal-perl-doc
RUN apt-get -y install libgdal-perl
RUN apt-get -y install libgdal-dev
RUN apt-get -y install gdal-data
RUN apt-get -y install gdal-bin

CMD ["java", "-jar", "/app.jar"]

在容器上运行的Java代码中有一个片段:

String command = "ogrinfo PG:\"host=host.docker.internal user=postgres dbname=test password=postgres\"";
Process process = Runtime.getRuntime().exec(command);

则输出为:

Unable to open datasource `PG:"host=host.docker.internal' with the following drivers.

但是,当我试图直接从bash在容器上运行命令时,它就成功了:

root@7b5fb10431cf:/# ogrinfo PG:"host=host.docker.internal user=postgres dbname=test password=postgres"
INFO: Open of `PG:host=host.docker.internal user=postgres dbname=test password=postgres'
      using driver `PostgreSQL' successful.

为什么会有这样的差别呢?

共有1个答案

封永嘉
2023-03-14

连接字符串的语法很重要PostgreSQL/PostGIS,问题可能出在流程实例Java runtime.exec上。PG命令必须以与直接在容器中运行相同的方式运行,这对您来说应该是有效的:

String connection = "\"host=host.docker.internal user=postgres dbname=test password=postgres\"" ;
String[] commands = {"bash","ogrinfo","PG:"+connection};
Process process = Runtime.getRuntime().exec(commands);
 类似资料:
  • 我正在尝试将和连接在一起工作。工作正常,但当我尝试创建新服务器时,有两个问题: 如果容器位于不是5432的其他端口,则不会识别该端口。显示此错误: 如果容器位于端口5432处,则错误为的密码身份验证失败。 我执行以下命令以获取容器:。 在stackoverflow中的其他响应之后,我尝试添加这个命令,并且我也在配置文件中输入,但没有一个对我有用。 希望你能帮助我,谢谢。 好吧,我解决了,这是我的一

  • 我已经创建了一个docker映像,允许用户使用SSH在上面连接。 出于安全原因,我希望用户可以更改他们的密码。我只使用docker命名的卷,所以我不能绑定 /etc/passwd,我不想挂载所有 /etc 有什么想法吗?提前感谢。

  • 我有一个容器,我想停止,但当我做一个它挂起,永远不会停止它。 我试过正常的和

  • 我一直在尝试获取一个基本的nodeJS api来连接到mongo容器。这两个服务都是在docker compose中定义的。yml文件。我在这里和docker论坛上读到了无数类似的问题,都指出问题是您的mongo连接URI。这不是我的问题,你将在下面看到。docker编写。yml公司 在此输入图像描述 Dockerfile文件 在此输入图像描述 我一直在尝试获取一个基本的nodeJS api来连接

  • 本文向大家介绍Docker的MySQL容器时区问题修改,包括了Docker的MySQL容器时区问题修改的使用技巧和注意事项,需要的朋友参考一下 前言 阿航在开发Springboot项目时, 前端告诉验证码一直无效. 本地测试没有问题, 一看远程服务器的数据库时间, 哇塞–早了8小时. 很明显, 是MySQL的时区问题. 本篇文章就来记录下如何修改Docker 的 MySQL 容器时区. 解决方案

  • 问题内容: 我正在尝试将nginx的dockerized版本用作我的节点(ExpressJS)应用程序的代理服务器。没有对nginx进行任何配置并为容器发布端口80,我可以看到默认的nginx登陆页面。所以我知道很多工作。 现在,我可以挂载包含站点配置的启用站点的目录。我的节点应用程序在本地运行(不在任何Docker容器中),并且可以通过端口3000(即)访问它。但是,我假设在运行nginx容器,