Как оценить выражение bash переменной среды на хост-машине перед внедрением в докер-контейнер? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть файл docker-compose.yml, в котором я определяю количество служб.Для одной из служб требуется переменная окружения, специфичная для хост-компьютера (например, IP-адрес устройства в локальной сети WiFi).Вместо того, чтобы жестко программировать это, я бы предпочел использовать выражение bash, которое при оценке вернет правильное значение.

Это кажется правильным способом передачи таких переменных средычерез файл dot-env, помещенный в текущий рабочий каталог .См. Текущий код ниже:

docker-compose.yml :

version: '3.1'

services:
  ...
  mobile:
    build:
      context: .
      dockerfile: Dockerfile.mobile
    command: bash -c "export BASE_URL=$$(node base_url.js)
                      && npm start --lan"
    environment:
      - REACT_NATIVE_PACKAGER_HOSTNAME=${HOST_DEVICE_IP}
    depends_on:
      - ngrok
    ports:
      # Expose Metro Bundler
      - 19001:19001
      # Expose Expo DevTools
      - 19002:19002
      # Expose App
      - 19000:19000

.env :

HOST_DEVICE_IP=$(ipconfig getifaddr en0)

Однако при запуске служб с помощью docker-compose * envvar REACT_NATIVE_PACKAGER_HOSTNAME имеет значение $(ipconfig getifaddr en0).Другими словами, файл .env не оценивает выражение и вводит его как строку.

TLDR : Как передать переменные среды в контейнер, где значение может бытьВыражение bash, которое вычисляется на хост-компьютере?

1 Ответ

1 голос
/ 10 апреля 2019

Удалите HOST_DEVICE_IP из вашего .env файла и задайте его в командной строке при запуске docker-compose up:

HOST_DEVICE_IP=$(ipconfig getifaddr en0) docker-compose up -d

Но мне интересно, действительно ли вам это нужно? Если вы используете Mac или Windows, вы можете использовать специальное имя хоста host.docker.internal для ссылки на хост Docker. Если вы работаете в Linux, вы можете просто посмотреть адрес шлюза по умолчанию внутри контейнера (который будет соответствовать адресу мостового устройства на хосте, к которому подключен контейнер).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...