Docker Java Application无法从控制台获取input

我正在尝试为我的Java应用程序创build一个泊坞窗图像。 在启动时,这个应用程序需要一个密码(目前通过控制台)。

我尝试了几种获得input的方法,但都失败了。 这是docker的限制,如果是的话有一个解决方法?

对于这个片段:

Console console = System.console(); if(console == null){ System.out.println("console is null!!"); } else { System.out.println("Input password: "); char[] password = console.readPassword("Pass: "); } 

System.console()返回null

对于这个片段:

  System.out.println("Creating InputStreamReader"); InputStreamReader s = new InputStreamReader(System.in); System.out.println("Creating BufferedReader"); BufferedReader r = new BufferedReader(s); System.out.println("Input password: "); String password = r.readLine(); System.out.println("Password: "+password); 

input被自动跳过(导致string密码为空),程序继续执行,就好像没有input请求一样。 (密码为null

对于这个片段:

 Scanner s = new Scanner(System.in); System.out.println("Input password: "); String password = s.next(); 

我明白了

 Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:907) at java.util.Scanner.next(Scanner.java:1416) at com.docker.test.DockerTest.testScanner(DockerTest.java:49) etc... 

我使用docker run test/plaintest1从我的映像中docker run test/plaintest1

我的dockerfile如下

 FROM centos RUN yum install -y java-1.7.0-openjdk ADD DockerTest.jar /opt/ssm ENTRYPOINT ["java","-jar","/opt/ssm/DockerTest.jar"] CMD [""] 

解决了它。

通过使用-i和-t参数运行命令,您可以input密码。 使用所有3种方法。

所以基本上docker run -i -t <imagename> <params>

昨天的大部分时间我都在为此而挣扎。 这个问题似乎是由官方的CentOS回购提供的一个破碎的基础图像。 如果您查看基本映像,则会注意到基本映像上存在/ opt / java。 这是你有破碎的形象的线索。 只需用“docker pull centos”把最新的图像拉回来,你就会回来了。 他们昨天晚上肯定已经修好了 即使它显示图像在2周前上传,您仍会注意到图像的散列已更改。 有人正试图隐藏他们的轨道! 哈哈。 你的Dockerfile很好。

问候温昂