使用 Dockerrun.aws.json 和 Elastic Beanstalk 命名 Docker 容器

Posted

技术标签:

【中文标题】使用 Dockerrun.aws.json 和 Elastic Beanstalk 命名 Docker 容器【英文标题】:Naming a Docker container with Dockerrun.aws.json and Elastic Beanstalk 【发布时间】:2018-02-08 03:27:08 【问题描述】:

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

我四处搜索,似乎找不到任何关于在使用 EB 构建和设置过程中如何为 Docker 容器分配名称的信息。

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

【问题讨论】:

【参考方案1】:

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

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

希望它能为您提供有关如何解决问题的任何想法。 :-)

【讨论】:

【参考方案2】:

可以使用 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的示例

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

【讨论】:

我最近试过了,但是在运行docker ps的时候,容器的名字还是一个hash。

以上是关于使用 Dockerrun.aws.json 和 Elastic Beanstalk 命名 Docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

每个环境单独的 Dockerrun.aws.json

AWS CodePipeline - 使用现有 Dockerrun.aws.json 部署到 Elastic Beanstalk

使用 Dockerrun.aws.json 和 Elastic Beanstalk 命名 Docker 容器

返回码:1 输出:Dockerfile 和 Dockerrun.aws.json 都丢失,中止部署

从 Dockerrun.aws.json -AWS 增加 EBS 中的命令超时

Dockerrun.aws.json:没有这样的文件或目录