使用Dockerrun.aws.json和Elastic Beanstalk

时间:2017-08-30 12:06:27

标签: amazon-web-services docker docker-compose elastic-beanstalk

我需要在EB应用上执行部署后脚本。我需要在多容器Docker环境中的Docker容器上执行命令。问题是Docker容器被分配了一个容器名称的随机哈希。

我已经搜索过,似乎无法找到有关如何在使用EB构建和设置过程中为Docker容器指定名称的任何信息。

有没有人对此有任何见解?我知道使用docker-compose这不是一个问题。

2 个答案:

答案 0 :(得分:1)

即使您在Dockerrun.aws.json中命名容器,beanstalk仍然使用包含环境名称和其他类似内容的特定哈希命名它们。但它也有上面文件的名称。

8a18a679564e   XXXXXXXXXX.dkr.ecr.eu-west-1.amazonaws.com/XXX:1.0.0-nginx   "nginx -g 'daemon ..."   13 hours ago        Up 13 hours         0.0.0.0:80->80/tcp   ecs-awseb-test-rcbdaytu5h-6-nginx-e6a58fe786d9eae7dc01

最后一列包含我们所说的哈希。如果您正在创建部署后脚本,您仍然可以使用

获取容器ID
docker ps -qf name=nginx

根据名称部分返回容器ID。

我会在.ebextensions

的配置文件中执行类似的操作
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_do_something_on_container.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      MY_CONTAINER=$(docker ps -qf name=nginx)
      docker exec $MY_CONTAINER my command

希望它能让您了解如何解决问题。 : - )

答案 1 :(得分:0)

可以使用Docker.aws.json文件命名容器,请参阅

"containerDefinitions": [
    {
      "name": "php-app",
      "image": "php:fpm",
      "environment": [
        {
          "name": "Container",
          "value": "PHP"
        }
      ],
      "essential": true,
      "memory": 128,
      "mountPoints": [
        {
          "sourceVolume": "php-app",
          "containerPath": "/var/www/html",
          "readOnly": true
        }
      ]
    }

这是http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html#create_deploy_docker_v2config_dockerrun

的示例

您可以用类似的方式命名容器