gpt4 book ai didi

java - 如何使用 java 调用的 shell 脚本登录、标记、推送 Docker 镜像到 AWS

转载 作者:行者123 更新时间:2023-12-02 12:21:56 24 4
gpt4 key购买 nike

您好,我正在尝试通过 shell 命令编程将 docker 镜像推送到 AWS EC2 容器服务。但我在执行此操作时遇到了困难,并且收到以下错误消息:

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

此错误消息是从我的 java 类返回的。如果我从终端启动 shell 脚本,只有从我的 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"});

关于java - 如何使用 java 调用的 shell 脚本登录、标记、推送 Docker 镜像到 AWS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45703247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com