我需要在EB應用程序上執行部署後腳本。我需要在多容器Docker環境中的Docker容器上執行命令。問題在於Docker容器被分配了一個隨機散列作爲容器名稱。使用Dockerrun.aws.json和Elastic Beanstalk命名Docker容器
我已經四處搜索,似乎找不到任何有關如何在EB構建和設置過程中爲Docker容器分配名稱的信息。
有沒有人有任何見解?我知道與碼頭合成這不是一個問題。
我需要在EB應用程序上執行部署後腳本。我需要在多容器Docker環境中的Docker容器上執行命令。問題在於Docker容器被分配了一個隨機散列作爲容器名稱。使用Dockerrun.aws.json和Elastic Beanstalk命名Docker容器
我已經四處搜索,似乎找不到任何有關如何在EB構建和設置過程中爲Docker容器分配名稱的信息。
有沒有人有任何見解?我知道與碼頭合成這不是一個問題。
命名容器可以使用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
}
]
}
爲例,用戶可以在類似的方式命名容器進行
即使您在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
希望它讓你對如何解決你的問題的想法。 :-)
我最近嘗試過,但是在運行'docker ps'時,容器的名字仍然是一個散列。 –