【问题标题】:Can't read user input inside the Docker using Maven plugin无法使用 Maven 插件读取 Docker 内的用户输入
【发布时间】:2017-02-14 11:48:26
【问题描述】:

说明

我正在编写一个简单的控制台应用程序,它在 Docker 容器中启动,读取用户输入并对其进行处理。对于自动化 Docker,我使用docker-maven-plugin。 读取用户输入的代码如下:

new Scanner(System.in).nextLine()

还尝试了以下方法:

new BufferedReader(new InputStreamReader(System.in)).readLine()

在没有 Docker 的情况下运行应用程序适用于这两种情况。

我使用以下命令运行 docker: mvn clean docker:build docker:run

但是在 Docker 中,当涉及到用户输入时,代码只返回 null 并且不会阻止用户输入。如果是Scanner,我得到java.util.NoSuchElementException: No line found,基本上是一样的。

我在StackOverflow 上发现了一个类似的问题,其中传递命令行参数-i -t 似乎有帮助。

有什么方法可以将这些命令行参数添加到Maven 运行配置中?或者有什么想法为什么会发生这个问题?

信息

  • Maven 版本:3.3.9
  • Docker 版本:1.13.1

【问题讨论】:

  • 你意识到docker容器运行在一个与你的PC分开的虚拟机中吧?您需要 ssh 到容器,然后从那里使用您的 java 应用程序。这带来了一个问题,为什么你需要用 docker 运行你的应用程序?
  • @EanV 是的,我明白了。 Java 应用程序在容器启动后由 Maven 插件使用 <cmd> 选项自动启动,但问题是关于从 docker 容器执行 Java 应用程序以及为什么系统输入没有阻塞。

标签: java maven docker fabric8 docker-maven-plugin


【解决方案1】:

docker-maven-plugin 是不可能的。见this

我也同意 rhuss(链接中的最后一条评论)。您正在使用 maven,它是一个构建工具,然后启动容器,这可能会以某种方式帮助您构建测试某些东西。此外,如果您参考 docker 文档中的 this 部分,它会说

当客户端标准输出被重定向或管道时,禁止指定-t

这可能是一个构建插件。

【讨论】:

  • 感谢您的回答。对我有用的解决方案是使用mvn docker:build 构建图像,然后使用docker run -i -t [image-name] 连接到它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多