Makefile: извлеките переменную env из контейнера Docker и используйте ее в другом контейнере Docker - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть приложение, которое работает на нескольких контейнерах докеров.Чтобы упростить мою проблему, скажем, у меня есть 3 контейнера: один для MySQL и 2 для 2 экземпляров API (совместно использующих тот же объем, где находится код, но с другим env, задающим другие параметры базы данных), как настроено в следующем docker-compose.yml

services:
  api-1:
    image: mynamespace/my-image-name:1.0
    environment:
      DB_NAME: db_api_1
  api-2:
    image: mynamespace/my-image-name:1.0
    environment:
      DB_NAME: db_api_2

В Makefile у меня есть правила для развертывания контейнеров и установки базы данных для каждого из моих экземпляров API.

То, что я пытаюсь достичь, - это создать make правило, которое создает дамп базы данных с env.Зная, что на моих экземплярах API не установлен клиент MySQL, я подумал, что должен быть способ извлечь нужные мне env переменные (с printenv VARNAME) из контейнера API, а затем использовать его в контейнере базы данных.

Кто-нибудь знает, как этого можно достичь?

1 Ответ

0 голосов
/ 07 декабря 2018

Предполагая, что это переменная среды, которую вы устанавливаете с помощью опции -e на docker run, вы можете сделать что-то вроде этого:

docker exec api_container sh -c 'echo $VARNAME'

Если это переменная среды, которая была установлена ​​внутри контейнеранапример, из сценария, тогда вам в основном не повезло.Вы, конечно, можете проверить /proc/<pid>/environ, но это глупо, и я бы не стал его рекомендовать.

Это также звучит так, как если бы вам было полезно использовать что-то вроде docker-compose для управления вашимконтейнеры.

...