#amazon-web-services #docker #amazon-ecs #aws-fargate
Вопрос:
Я запускаю стороннее приложение в AWS ECS с fargate в качестве типа запуска. Это приложение требует, чтобы IP-адрес хоста передавался в качестве переменной среды. Но в типе запуска fargate я не буду знать IP-адрес, пока задачи не будут запущены и запущены. Поэтому я планирую изменить файл DockerFile, чтобы добавить IP-адрес хоста в качестве переменной среды. Как я могу это сделать?
Ответ №1:
Вы хотите использовать метаданные задачи для самоанализа своей задачи и характеристик контейнера (включая его частный IP-адрес). Вам нужно curl ${ECS_CONTAINER_METADATA_URI_V4}/task
будет выйти из контейнера и проанализировать ответ, чтобы найти то, что вам нужно. Обратитесь к этой документации для описания структуры возвращаемого JSON.
Комментарии:
1. Спасибо, но 1. Мне нужно установить переменную во время создания контейнера 2. Я не могу «попасть внутрь» контейнера, как только он запущен и запущен, из-за типа запуска Fargate. Тогда как я могу его завить?
2. Я предлагал вам заполнить переменную во время выполнения в сценарии запуска, а не во время настройки (также потому, что, как вы сказали, вы не знаете и не можете знать IP-адрес заранее). Я не имел в виду заполнять переменную вручную (хотя вы могли бы сделать это с помощью новой функции, получившей название ECS Exec , которую мы недавно запустили). Я имел в виду запустить curl как часть вашего сценария запуска, сохранить IP-адрес в переменной, а затем запустить приложение из сценария.
3. Я думаю, что здесь есть путаница. Я хочу установить IP-адрес ХОСТА (машины, на которой запущен контейнер) в качестве переменной среды В контейнере. Метаданные задачи предоставляют IP-адрес самого контейнера, а не базового хоста.
4. Да, я думаю, что есть путаница, потому что нет хоста вообще, если вы используете Fargate (или нет, к которому вы все равно можете получить доступ/иметь дело). Определенно нет никакого «IP-адреса для хоста». В этом и заключается вся идея Fargate: развертывать контейнеры без необходимости иметь/управлять/просматривать инфраструктуру. В чем причина, по которой вам нужен IP-адрес хоста? Зачем это нужно приложению?
5. В основном контейнер, в котором я пытаюсь установить переменную env, является «генератором нагрузки». Этот контейнер будет отправлять запросы целевому объекту с целью нагрузочного тестирования. Существует еще один контейнер, который является «контроллером». Контроллер управляет одним или несколькими LGS. Таким образом, он должен иметь возможность связаться с любым LG через порт $LG_HOST:. Это сторонний инструмент, поэтому у меня нет большой свободы изменять логику. Контроллер: hub.docker.com/r/neotys/neoload-controller LG: hub.docker.com/r/neotys/neoload-loadgenerator