Wie kann ich ein Docker-Image aus einem privaten Repository abrufen und es auf einer Elastic-Beanstalk-Docker-Plattform verwenden?

Lesedauer: 4 Minute
0

Ich möchte ein Docker-Image aus einem privaten Repository abrufen und es auf meiner Elastic-Beanstalk-Plattform verwenden.

Kurzbeschreibung

Wenn Sie ein Image aus einem privaten Repository abrufen, erhalten Sie möglicherweise die folgende Fehlermeldung von Ihrer Elastic-Beanstalk-Instance:

Fehlermeldung aus /var/log/ecs/ecs-agent.log[CannotPullContainerError] Error response from daemon: pull access denied for {username}/{repo}, repository does not exist or may require 'docker login': denied: requested access to the resource is denied" module=docker_client.go

Dieser Fehler tritt auf, wenn zwischen der Private Registry und Elastic Beanstalk eine Authentifizierungslücke besteht. Um ein Image aus einem private Repository verwenden zu können, muss sich Elastic Beanstalk bei der Online-Registry authentifizieren, die das private Repository hostet. Die Authentifizierung muss stattfinden, bevor Elastic Beanstalk Ihre Images aus einem privaten Repository abruft und bereitstellt. Es gibt zwei Möglichkeiten, Anmeldeinformationen für eine Elastic-Beanstalk-Umgebung abzurufen und zu speichern, um sich bei einem privaten Repository zu authentifizieren:

  • AWS Systems Manager (SSM) Parameter Store
  • Dockerrun.aws.json-Datei

Lösung

Gehen Sie so vor, um mithilfe einer Dockerrun.aws.json-Datei ein Docker-Image aus einem privaten Repository abzurufen:

  1. Generieren Sie ein gültiges Authentifizierungstoken
  2. Erstellen Sie einen Amazon Simple Storage Service (Amazon S3)-Bucket und speichern Sie die Authentifizierungsdatei
  3. Erstellen Sie die Datei Dockerrun.aws.json v2

Generieren Sie ein gültiges Authentifizierungstoken

Hinweis: Wenn beim Ausführen von Befehlen für die AWS Command Line Interface (AWS CLI) Fehler auftreten, vergewissern Sie sich, dass Sie eine aktuelle Version der AWS-CLI ausführen.

  1. Installieren Sie Docker auf Ihrem Computer, indem Sie den folgenden Befehl ausführen:

    $ brew install docker
  2. Erstellen Sie ein Konto in dockerhub.

  3. Erstellen Sie ein Repository und übertragen Sie ein Image an das Repository.

  4. Führen Sie den Befehl Docker login aus:

    $ Docker login
  5. Erstellen Sie mit dem folgenden Befehl eine Datei mit dem Namen credentials.env:

    $ vi credentials.env
  6. Fügen Sie der zuvor erstellten Datei folgende Anmeldeinformationen hinzu:

    Hinweis: Ersetzen Sie alle example-Zeichenfolgen durch Ihre angegebenen Werte, speichern Sie dann Ihre Datei und beenden Sie den Editor-Modus.

    DOCKER_USERNAME=example-user-name
    DOCKER_PASSWORD=example-password
    DOCKER_REGISTRY=https://index.docker.io/v1/
  7. Führen Sie folgenden Befehl aus:

    docker run -it --rm \
    -env-file=credentials.env \
    v "$(pwd):/opt/data/" \
    v "/var/run/docker.sock:/var/run/docker.sock" \
    codeship/dockercfg-generator /opt/data/dockercfg
  8. Rufen Sie die .dockercfg-Datei ab:

    $ cat  /opt/data/dockercfg

    Beispiel für eine Ausgabe:

    {
    "https://index.docker.io/v1/ ": {
    "auth": '**************************AMTE="     
    },
    "HttpHeaders": {
    "User-Agent": "Docker-Client/18.03.1-ce (linux)"
    }
    }

    Hinweis: Fügen Sie die .dockercfg-Datei in Ihr Anwendungsquellpaket ein.

Amazon-S3-Bucket erstellen und die Authentifizierungsdatei speichern

Erstellen Sie einen sicheren Amazon-S3-Bucket und übertragen Sie die .dockercfg-Datei in den Bucket. Stellen Sie Folgendes sicher:

  • Der Amazon-S3-Bucket wird in derselben AWS-Region gehostet wie die Umgebung, in der er verwendet wird. Elastic Beanstalk kann keine Dateien aus einem Amazon-S3-Bucket herunterladen, der in anderen Regionen gehostet wird.
  • Berechtigungen werden für den Vorgang s****3:GetObject der AWS Identity and Access Management (IAM)-Rolle im Instance-Profil Berechtigungen erteilt.

Dockerrun.aws.json v2-Datei erstellen

Erstellen Sie die Datei Dockerrun.aws.json v2, indem Sie den folgenden Befehl ausführen und die Amazon-S3-Bucket-Informationen unter dem authentication-Parameter hinzufügen:

  • Fügen Sie für den bucket-Parameter Ihre Amazon-S3-Bucket-Informationen hinzu.
  • Fügen Sie für den image-Parameter Ihren Image-Namen mit dem Tag hinzu. Dieses kann von Ihrem dockerhub-Konto abgerufen werden.
{
"AWSEBDockerrunVersion": 2,  
"authentication": {    
"bucket": "example-bucket-name",    
"key": ".dockercfg"  
},  
"volumes": [    
{      
"name": "php-app",      
"host": {        
"sourcePath": "/var/app/current/php-app"      
}    
},    
{      
"name": "nginx-proxy-conf",      
"host": {        
"sourcePath": "/var/app/current/proxy/conf.d"      
}    
}  
],  
"containerDefinitions": [    
{      
"name": "php-app",      
"image": "example-image-name",      
"essential": true,      
"memory": 128,      
"mountPoints": [        
{          
"sourceVolume": "php-app",          
"containerPath": "/var/www/html",          
"readOnly": true        
},        
{          
"sourceVolume": "awseb-logs-php-app",          
"containerPath": "/var/log/sample-app"        
}      
]    
},    
{      
"name": "nginx-proxy",      
"image": "nginx",      
"essential": true,      
"memory": 128,      
"portMappings": [        
{          
"hostPort": 80,          
"containerPort": 80        
}      
],      
"links": [        
"php-app"      
],      
"mountPoints": [        
{          
"sourceVolume":"php-app",          
"containerPath": "/var/www/html",          
"readOnly": true        
},        
{          
"sourceVolume": "awseb-logs-nginx-proxy",          
"containerPath": "/var/log/nginx"        
},        
{          
"sourceVolume": "nginx-proxy-conf",          
"containerPath": "/etc/nginx/conf.d",          
"readOnly": true        
}      
]    
}  
]
}

Hinweis: Mit dem vorherigen Befehl kann sich Ihre Elastic-Beanstalk-Instance erfolgreich bei der Online-Registry authentifizieren.

Ähnliche Informationen

Verwenden von Bildern aus einem privaten Repository

Zugreifen auf private Docker-Images von AWS Elastic Beanstalk

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 8 Monaten