Назад | Перейти на главную страницу

Многоконтейнерное развертывание beanstalk только с предварительно созданными образами

У меня уже настроена система CI, которая создает и отправляет образы докеров в ECR. В Dockerrun.aws.json файл Я использую эти изображения (ссылки) для запуска среды beanstalk с несколькими контейнерами докеров.

Образец Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "web-app",
      "host": {
        "sourcePath": "/var/app/current/web-app"
      }
    },
    {
      "name": "api-service",
      "host": {
        "sourcePath": "/var/app/current/api-service"
      }
    }
  ],
  "containerDefinitions": [
    {
      "name": "api-service",
      "image": "somekey.dkr.ecr.us-west-2.amazonaws.com/api-service",
      "essential": true,
      "memory": 800,
      "privileged": true,
      "portMappings": [
        {
          "hostPort": 8080,
          "containerPort": 80
        }
      ],
      "command": [
        "/bin/bash",
        "/root/api-service/before_run.sh"
      ],
      "mountPoints": [
        {
          "sourceVolume": "api-service",
          "containerPath": "/root/api-service"
        }
      ]
    },
    {
      "name": "web-app",
      "image": "somekey.dkr.ecr.us-west-2.amazonaws.com/web-app",
      "essential": true,
      "memory": 800,
      "environment": [
        {
          "name": "ENVIRONMENT",
          "value": "staging"
        }
      ],
      "command": [
        "/bin/bash",
        "/root/web-app/before_run.sh"
      ],
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ],
      "mountPoints": [
        {
          "sourceVolume": "web-app",
          "containerPath": "/root/web-app"
        }
      ]
    }
  ]
}

Проблема в том, что beanstalk не использует эти изображения. Вместо этого он использует код, который находится в /var/current/app/api-service папка.

Итак, если я просто загружу Dockerrun.aws.json файл, с которым он не работает No file or directory так как в /var/current/app/api-service. Аналогично, если я добавлю папку api-service вместе с Dockerrun.aws.json а затем развернуть. Оно работает.

Идея состоит в том, чтобы просто извлечь эти образы докеров из ECR и запустить их без развертывания дополнительного исходного кода в контейнере.

P.S: Я добавил доступ ECR к профилю экземпляра eb. И я вижу, что изображения вытягиваются правильно. Даже я могу запускать их вручную без каких-либо проблем на удаленном экземпляре.

Мне удалось с этим справиться, используя следующий подход.

удалять mountpoints из Dockerrun.aws.json чтобы позволить докеру использовать собственное рабочее пространство.

Итак, вот новый Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": 2,

  "containerDefinitions": [
    {
      "name": "api-service",
      "image": "somekey.dkr.ecr.us-west-2.amazonaws.com/api-service",
      "essential": true,
      "memory": 800,
      "privileged": true,
      "portMappings": [
        {
          "hostPort": 8080,
          "containerPort": 80
        }
      ],
      "command": [
        "/bin/bash",
        "/root/api-service/before_run.sh"
      ]
    },
    {
      "name": "web-app",
      "image": "somekey.dkr.ecr.us-west-2.amazonaws.com/web-app",
      "essential": true,
      "memory": 800,
      "environment": [
        {
          "name": "ENVIRONMENT",
          "value": "staging"
        }
      ],
      "command": [
        "/bin/bash",
        "/root/web-app/before_run.sh"
      ],
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ]
    }
  ]
}