您好,我正在尝试通过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);
    }
  }
}

#1楼 票数:1 已采纳

在您的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"});

  ask by Betzen Ben translate from so

未解决问题?本站智能推荐:

2回复

如何编写脚本来创建EC2实例

我需要编写一个脚本来创建并运行EC2实例。 我不知道从哪里开始,有人可以帮助我吗? 如果有人可以给我一个例子,那对我会非常有帮助。
2回复

强制 AWS 库从 docker 集群内的环境中获取区域

我正在尝试测试在我桌面上的 docker 容器中运行的 Java 应用程序。 如果我直接从命令行执行该应用程序,它运行良好,但是当我尝试在桌面上的 Docker 容器中运行它时它会失败。 错误输出显示库正在请求区域信息,然后失败并显示以下错误: 我提供该区域作为环境变量: 如果我对该区域进行
1回复

在使用分配的 IAM 进行访问的 ec2 上使用 java SDK 在 aws 中承担不同的角色

我在 EC2 实例上的 docker 容器中运行一个简单的 Java 应用程序。 java 应用程序本身没有硬编码凭证,aws sdk 假定分配给 EC2 实例的凭证。 这工作正常,但我现在需要它在中间执行期间动态承担不同的角色。 我正在尝试使用以下代码来帮助执行此操作,但我在倒数第二行“Ass
1回复

如何为运行 Java 应用程序的多 docker 容器 AWS Elastic Beanstalk 环境动态分配内存

我想从免费的弹性豆茎层中挤出所有可能的使用量。 我的后端构建为一组微服务(使用 ktor)。 准确地说,我有5 个微服务。 所有这些都是 dockerized,我试图在同一个微型t2.micro (免费)弹性 beanstalk 实例上运行它们,并使用多docker图像环境 Java 是 jav
2回复

在EC2中运行多个Docker实例

我是AWS的新手。 所以,如果我的问题没有道理,请忍受我。 我的目标是在一个AWS EC2实例中运行多个docker容器(具有不同的docker配置)。 到目前为止,我已经能够使用Java SDK以编程方式启动和停止EC2实例。 我想在EC2中运行docker实例时,我将不得不使
1回复

Docker 容器中的 FTP 上传文件失败

我有一个使用库 apache commons-net 的 Spring Boot 应用程序我有一个在 AWS EC2 上运行的 FTP 服务器。 Filezilla 正常连接并上传文件。 本地应用程序正常连接并上传文件。 当我使用 Docker 运行此应用程序时,该应用程序连接到 ftp 成功,但
1回复

容器定义中带有java命令的AWS EC2 Task / Service容器

我们需要在AWS EC2上部署docker容器,Hawkbit和RabbitMQ将在该容器上运行。 设置任务放置位置时,我们试图将Java命令放入容器定义的命令部分。 launch,当我们启动服务时,容器会停止,因为AWS显然不执行java命令。 有没有一种方法可以在不通过SSH进
1回复

无法使用AWS登录Docker

考虑到我决定将Docker容器部署到大量EC2上,这是我最后一个问题的扩展。 我已经建立了一个存储库和一个具有完全权限的用户,并且向aws cli配置中添加了正确的密钥。 当我尝试运行在运行“ aws ecr get-login”命令后出现的docker login命令时,它给我一个失败,状