У меня есть файл 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, которое вычисляется на хост-компьютере?