8

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

输入被自动跳过(导致字符串密码为空),程序继续执行,就好像没有请求输入一样。(密码是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 [""]
4

2 回答 2

18

解决了。

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

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

于 2014-08-19T07:46:47.363 回答
0

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

问候温南德

于 2014-08-19T07:47:33.290 回答