CannotPullContainerError beim Versuch, AWS Multicontainer mithilfe von Elasticbeanstalk mit EB CLI bereitzustellen

CannotPullContainerError beim Versuch, AWS Multicontainer mithilfe von Elasticbeanstalk mit EB CLI bereitzustellen

Ich habe versucht, mithilfe der ebBefehlszeilenschnittstelle ein einfaches Docker-Image auf AWS ElasticBeanstalk bereitzustellen, kann den Docker-Dienst in ECS jedoch aufgrund des folgenden Fehlers nicht starten:

ungültiges Referenzformat: Repository-Name muss klein geschrieben sein

Meine Dockerrun.aws.jsonDatei:

{
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    {
      "name": "ipsec-vpn-server",
      "image": "hwdsl2/ipsec-vpn-server:latest",
      "essential": true,
      "memory": 128,
      "portMappings": [
        {
          "hostPort": 500,
          "containerPort": 500
        },
        {
          "hostPort": 4500,
          "containerPort": 4500
        }
      ]
    }
  ]
}

Mein.ebignore

# Only keep Dockerrun.aws.json
*
!Dockerrun.aws.json

Ich habe die AWSElasticBeanstalkMulticontainerDockerRolle angehängt an aws-elasticbeanstalk-service-role:

aws --profile my-profile-name \
iam attach-role-policy \
policy-arn arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker \
--role-name aws-elasticbeanstalk-service-role

AWSElasticBeanstalkMulticontainerDocker-Richtlinie in der AWS-ElasticBeanstalk-Servicerolle

Ich habe die AWS-EB-Umgebung wie folgt erstellt:

export VPN_USER="some_secret_user"
export VPN_PASSWORD="some_secret_password"    
export VPN_IPSEC_PSK="some_secret_ipsec_psk"

eb create vpn-example \
--profile my-profile-name \
--region us-east-1 \
--platform multi-container-docker-17.09.1-ce-\(generic\) \
--envvars VPN_USER=${VPN_USER} \
--envvars VPN_PASSWORD=${VPN_PASSWORD} \
--envvars VPN_IPSEC_PSK=${VPN_IPSEC_PSK} \
--cname some-vpn-example-domain

Die Umgebung wurde zwar korrekt erstellt, aber wie Sie sehen, ist sie nicht gesund ;)

eb-Umgebung

Die Umgebungserstellung läuft eine Weile, erstellt Lastenausgleichsprogramme usw. Aber sie schlägt nach einer Weile fehl, nachdem viele Versuche unternommen wurden, die Aufgabe hier im ECS-Dashboard zu starten:

ECS-Cluster

Wenn ich auf eine einzelne Aufgabe klicke, sehe ich Folgendes: ungültiges Referenzformat: Repository-Name muss klein geschrieben sein

Status:

GESTOPPT (CannotPullContainerError: API-Fehler (400): ungültig)

Details Status Grund:

CannotPullContainerError: API-Fehler (400): ungültiges Referenzformat: Repository-Name muss klein geschrieben sein

Das letzte Ereignis zeigt folgende Warnung in der Elastic-Beanstalk-Umgebung:

Die Umgebungsintegrität hat sich von „Heruntergestuft“ auf „Schwerwiegend“ geändert. Der Befehl ist auf allen Instanzen fehlgeschlagen. Die ELB-Integrität ist für alle Instanzen fehlgeschlagen oder nicht verfügbar.

eb logshat überhaupt keine Ausgabe.

containerDefinitionsIch verwende in 's keine Großbuchstaben image. Das einzig Merkwürdige, das ich gefunden habe, ist die ImageSpalte in der Aufgabe, in der steht, Dockerrun.aws.jsonwo ich es erwarten würde hwdsl2/ipsec-vpn-server(glaube ich).

Ich dachte auch, dass dies ein Dienst und keine Aufgabe wäre. Jede Hilfe wäre sehr willkommen.

Ich kann anscheinend keine Möglichkeit finden, die Protokolle zu lesen. Ich habe es noch einmal von vorne versucht und die Protokolle für eb createden Befehl lauten wie folgt:

WARNING: The Multi-container Docker platform requires additional ECS permissions. Add the permissions to the aws-elasticbeanstalk-ec2-role or use your own instance profile by typing "-ip {profile-name}".
For more information see: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_ecs.html#create_deploy_docker_ecs_role
Creating application version archive "app-xxxx-xxxxxx_xxxxxx".
Uploading example-vpn/app-xxxx-xxxxxx_xxxxxx.zip to S3. This may take a while.
Upload Complete.
Environment details for: vpn-dev-01
  Application name: example-vpn
  Region: us-east-1
  Deployed Version: app-xxxx-xxxxxx_xxxxxx
  Environment ID: e-mtwbaums2n
  Platform: arn:aws:elasticbeanstalk:us-east-1::platform/Multi-container Docker running on 64bit Amazon Linux/2.9.0
  Tier: WebServer-Standard-1.0
  CNAME: example-vpn-SNIP.us-east-1.elasticbeanstalk.com
  Updated: 2018-03-22 18:55:03.173000+00:00
Printing Status:
INFO: createEnvironment is starting.
INFO: Using elasticbeanstalk-us-east-1-xxxxxxxxxxxx as Amazon S3 storage bucket for environment data.
INFO: Created security group named: sg-SNIP
INFO: Created security group named: awseb-e-SNIP
INFO: Created load balancer named: awseb-e-SNIP
INFO: Created Auto Scaling launch configuration named: awseb-e-SNIP
INFO: Created Auto Scaling group named: awseb-SNIP
INFO: Waiting for EC2 instances to launch. This may take a few minutes.
INFO: Created Auto Scaling group policy named: arn:aws:autoscaling:us-east-1:SNIP
INFO: Created Auto Scaling group policy named: arn:aws:autoscaling:us-east-1:SNIP
INFO: Created CloudWatch alarm named: awseb-e-SNIP
INFO: Created CloudWatch alarm named: awseb-e-SNIP
ERROR: Failed to start ECS task: arn:aws:ecs:us-east-1:xxxxxxxxxxxx:task/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx is STOPPED.
ERROR: ECS task stopped due to: Essential container in task exited. (ipsec-vpn-server: )
ERROR: Failed to start ECS task: arn:aws:ecs:us-east-1:xxxxxxxxxxxx:task/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx is STOPPED.
ERROR: Failed to start ECS task after retrying 2 times.
ERROR: [Instance: i-xxxxxxxxxxxxxxxxx] Command failed on instance. Return code: 1 Output: trying 2 times.' --severity ERROR
+ exit 1.
Hook /opt/elasticbeanstalk/hooks/appdeploy/enact/03start-task.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.
INFO: Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
ERROR: Create environment operation is complete, but with errors. For more information, see troubleshooting documentation.

Ich habe es erneut mit einem anderen Docker-Image versucht nginx:latestund der Dienst wurde gestartet. Das Problem, das ich hatte, war alsohwdsl2/ipsec-vpn-server:latestdirekt. Ich habe es noch einmal versucht, aber lokal:

docker pull hwdsl2/ipsec-vpn-server:latest
eb local run --debug

Und es zeigte mir den Fehler:

ipsecvpnserver_1 | Error: This Docker image must be run in privileged mode.
ipsecvpnserver_1 |
ipsecvpnserver_1 | For detailed instructions, please visit:
ipsecvpnserver_1 | https://github.com/hwdsl2/docker-ipsec-vpn-server
ipsecvpnserver_1 |
elasticbeanstalk_ipsecvpnserver_1 exited with code 1

Protokolle in Elasticbeanstalk sind nicht immer leicht zu lesen. Ich habe Folgendes hinzugefügt Dockerrun.aws.json:

"privileged": true,

Jetzt startet es beim lokalen Ausführen erfolgreich eb local run, schlägt aber in der Cloud weiterhin fehl.

Ich habe erstelltein Problem auf hwdsl2/docker-ipsec-vpn-server

verwandte Informationen