Docker Java应用程序无法从控制台获取输入

时间:2014-08-19 06:43:50

标签: java console virtualization docker system.in

我正在尝试为我的java应用程序创建一个docker镜像。在启动时,需要为该应用程序提供密码(目前通过控制台)。

我尝试了几种获取输入的方法,但它们都失败了。这是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);

自动跳过输入(导致String密码为null),程序继续执行,就好像没有请求输入一样。 (密码为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

在我的图片中运行该程序

我的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 [""]

2 个答案:

答案 0 :(得分:6)

解决了它。

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

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

答案 1 :(得分:0)

我昨天大部分时间都在努力解决这个问题。问题似乎是由官方CentOS回购提供的基础图像损坏。如果查看基本映像,您会注意到基本映像上存在/ opt / java。这就是你有破碎图像的线索。只需使用“docker pull centos”拉出最新图像,您就可以恢复运作了。他们必须在昨晚的某个时候修好它。您会注意到图像的哈希值已经更改,即使它显示图像是在2周前上传的。有人试图隐藏自己的踪迹!哈哈。你的Dockerfile很好。

此致 Wynand