代码之家  ›  专栏  ›  技术社区  ›  mangusbrother

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

  •  9
  • mangusbrother  · 技术社区  · 10 年前

    我正在尝试为我的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);
    

    自动跳过输入(导致字符串密码为空),程序继续执行,就像没有请求输入一样。(密码为 无效的 )

    对于此代码段:

    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

    我的案卷如下

    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 回复  |  直到 10 年前
        1
  •  21
  •   mangusbrother    10 年前

    解决了。

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

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

        2
  •  0
  •   Wynand    10 年前

    昨天的大部分时间我都在为这件事而挣扎。问题似乎是官方CentOS回购提供的基础图像损坏。如果您查看基础图像,您会注意到/opt/java存在于基础图像上。这就是你有坏图像的线索。只需使用“docker pull centos”拖动最新图像,您就可以重新开始操作。他们昨晚某个时候一定修好了。您会注意到图像的哈希值发生了变化,尽管它显示图像是2周前上传的。有人试图隐藏他们的踪迹!哈哈。你的Dockerfile很好。

    当做 维南