eb cli와 함께 elasticbeanstalk를 사용하여 AWS 멀티컨테이너를 배포하려고 하면 CannotPullContainerError가 발생합니다.

eb cli와 함께 elasticbeanstalk를 사용하여 AWS 멀티컨테이너를 배포하려고 하면 CannotPullContainerError가 발생합니다.

cli를 사용하여 AWS ElasticBeanstalk에 간단한 도커 이미지를 배포하려고 했지만 eb다음 오류로 인해 ECS에서 도커 서비스를 시작할 수 없습니다.

잘못된 참조 형식: 저장소 이름은 소문자여야 합니다.

Dockerrun.aws.json파일:

{
  "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
        }
      ]
    }
  ]
}

나의.ebignore

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

나는 AWSElasticBeanstalkMulticontainerDocker다음에 역할을 연결했습니다 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

aws-elasticbeanstalk-service-role의 AWSElasticBeanstalkMulticontainerDocker 정책

다음과 같이 aws eb 환경을 만들었습니다.

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

환경은 올바르게 생성되었지만 보시다시피 건강하지 않습니다. ;)

EB 환경

환경 생성은 잠시 동안 실행되고 로드 밸런서 등을 생성합니다. 그러나 여기 ECS 대시보드에서 작업을 여러 번 시작하려고 시도한 후 잠시 후 실패합니다.

EC 클러스터

단일 작업을 클릭하면 다음이 표시됩니다. 잘못된 참조 형식: 저장소 이름은 소문자여야 합니다.

상태:

중지됨(CannotPullContainerError: API 오류(400): 유효하지 않음)

세부정보 상태 이유:

CannotPullContainerError: API 오류(400): 잘못된 참조 형식: 저장소 이름은 소문자여야 합니다.

최신 이벤트는 Elastic Beanstalk 환경에서 다음과 같은 경고를 표시합니다.

환경 상태가 저하됨에서 심각으로 전환되었습니다. 모든 인스턴스에서 명령이 실패했습니다. ELB 상태가 실패하거나 모든 인스턴스에서 사용할 수 없습니다.

eb logs전혀 출력이 없습니다.

containerDefinitions에는 대문자를 사용하지 않습니다 image. 내가 발견한 유일한 이상한 점은 내가 예상하는 위치를 Image알려주는 작업 열 입니다 .Dockerrun.aws.jsonhwdsl2/ipsec-vpn-server

나는 또한 이것이 일이 아니라 서비스일 것이라고 생각했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

로그를 읽을 수 있는 방법을 찾을 수 없는 것 같습니다. 처음부터 다시 시도했는데 eb create명령에 대한 로그는 다음과 같습니다.

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.

다른 도커 이미지로 다시 시도했는데 nginx:latest서비스가 시작되었으므로 내가 겪은 문제는 다음과 같습니다.hwdsl2/ipsec-vpn-server:latest곧장. 다시 시도했지만 로컬에서는 다음과 같습니다.

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

그리고 그것은 나에게 오류를 보여주었습니다:

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

Elasticbeanstalk의 로그가 항상 읽기 쉬운 것은 아닙니다. 나는 이것을 다음에 추가했습니다 Dockerrun.aws.json:

"privileged": true,

이제 실행 시 성공하여 로컬에서 시작되지만 eb local run클라우드에서는 여전히 실패합니다.

내가 만들었어요hwdsl2/docker-ipsec-vpn-server 관련 문제

관련 정보