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很好。
问候温昂