我有一个docker-compose.yml文件,其中定义了许多服务。其中一个服务需要特定于主机的环境变量(例如,本地WiFi网络上设备的IP )。与其进行硬编码,我更愿意使用bash表达式,该表达式在计算时将返回正确的值。
似乎传递这些环境变量的正确方法是通过一个放置在当前工作目录中的点-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-组合启动服务时,REACT_NATIVE_PACKAGER_HOSTNAME envvar的值为$(ipconfig getifaddr en0)。换句话说,.env文件没有计算表达式,而是作为字符串注入。
TLDR:如何将环境变量传递到容器中,其中的值可以是在主机上计算的bash表达式?
发布于 2019-04-10 18:34:16
从HOST_DEVICE_IP文件中删除.env,并在运行docker-compose up时将其设置在命令行中
HOST_DEVICE_IP=$(ipconfig getifaddr en0) docker-compose up -d但我想知道你是否真的需要这个?如果您在Mac或Windows上,可以使用特殊的主机名host.docker.internal来引用Docker主机。如果您在Linux上,您只需查看容器内的默认网关地址(这将对应于容器连接到的主机上桥接设备的地址)。
https://stackoverflow.com/questions/55618821
复制相似问题