繁体   English   中英

如何使用从Java调用的Shell脚本登录,标记,将Docker映像推送到AWS

[英]How to Login,Tag, Push an Docker Image to AWS using shell script called from java

您好,我正在尝试通过Shell命令编程将docker映像推送到AWS EC2 Container Service。 但是我在这样做时遇到了麻烦,并且收到以下错误消息:

错误获取凭据-错误:exec:“ docker-credential-osxkeychain”:在$ PATH中找不到可执行文件,输出:``没有基本身份验证凭据

从我的java类返回此错误消息。 如果我从终端启动外壳脚本,则只有从我的java类启动外壳脚本时,我才不会出现问题。 我创建了一个config.js文件,并在其中添加了osxkeychain,因为我认为这可以解决问题。

这是我的Dockerfile:

FROM java:7
COPY . /Users/betzenben/Desktop/OGC/Projects/Getting_started/Docker/Directory
WORKDIR /Users/betzenben/Desktop/OGC/Projects/Getting_started/Docker/Directory
RUN javac Time_app.java
CMD ["java", "Time_app"]
Run : ~/Users/betzenben/Desktop/OGC/Projects/Getting_started/Docker/Directory/config.json 

这是我的config.json文件

{
    "apps": [
         {
         "credsStore": "osxkeychain"
         }
    ]
}

并且以防万一需要我的shell脚本代码和调用该shell脚本的java类。

#!/bin/sh

echo “test1”
getLoginKey="/usr/local/bin/"
getLoginKey+="$(/usr/local/bin/aws ecr get-login --no-include-email --region us-west-2)"
echo “test2”
echo "${getLoginKey}" 

executeLoginKey="$(eval $getLoginKey)"
echo “test3”
sleep 2
echo "${executeLoginKey}" 


tagImage="$(/usr/local/bin/docker tag time_app:latest .....id......dkr.ecr.us-west-2.amazonaws.com/time_a:latest)"
pushImage="$(/usr/local/bin/docker push .....id.......dkr.ecr.us-west-2.amazonaws.com/time_a:latest)"
wait
echo “test4”
sleep 5
echo "${pushImage}" 
echo "Image Pushed" 

Java代码:

import java.io.*;

public class Main {

  public static void main(String[] args) throws InterruptedException, IOException {

    Process p1 = Runtime.getRuntime().exec("chmod +x /Users/betzenben/Desktop/tag_push_image_AWS.sh");

    BufferedReader stdInput1 = new BufferedReader(new InputStreamReader(p1.getInputStream()));
    BufferedReader stdError1 = new BufferedReader(new InputStreamReader(p1.getErrorStream()));

    System.out.println("STDOUT:\n");
    String s1 = null;
    while ((s1 = stdInput1.readLine()) != null) {
      System.out.println(s1);
    }
    System.out.println("STDERR:\n");
    while ((s1 = stdError1.readLine()) != null) {
      System.out.println(s1);
    }

    Process p = Runtime.getRuntime().exec("/Users/betzenben/Desktop/tag_push_image_AWS.sh");

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

    System.out.println("STDOUT:\n");
    String s = null;
    while ((s = stdInput.readLine()) != null) {
      System.out.println(s);
    }
    System.out.println("STDERR:\n");
    while ((s = stdError.readLine()) != null) {
      System.out.println(s);
    }
  }
}

在您的tag_push_image_AWS.sh文件中进行更改

#!/bin/sh

#!/bin/bash

如果这不起作用,请尝试以下Java代码

Runtime.getRuntime().exec(new String[]{"/bin/bash","-lc", "/Users/betzenben/Desktop/tag_push_image_AWS.sh"});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM