[英]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.