使用 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 容器的主要内容,如果未能解决你的问题,请参考以下文章
AWS CodePipeline - 使用现有 Dockerrun.aws.json 部署到 Elastic Beanstalk
使用 Dockerrun.aws.json 和 Elastic Beanstalk 命名 Docker 容器
返回码:1 输出:Dockerfile 和 Dockerrun.aws.json 都丢失,中止部署