首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在码头集装箱注入前评估主机上的环境变量bash表达式?

问如何在码头集装箱注入前评估主机上的环境变量bash表达式?
EN

Stack Overflow用户
提问于 2019-04-10 18:07:35
回答 1查看 765关注 0票数 0

我有一个docker-compose.yml文件,其中定义了许多服务。其中一个服务需要特定于主机的环境变量(例如,本地WiFi网络上设备的IP )。与其进行硬编码,我更愿意使用bash表达式,该表达式在计算时将返回正确的值。

似乎传递这些环境变量的正确方法是通过一个放置在当前工作目录中的点-env文件。见下面的现行代码:

docker-compose.yml

代码语言:javascript
复制
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

代码语言:javascript
复制
HOST_DEVICE_IP=$(ipconfig getifaddr en0)

但是,当使用docker-组合启动服务时,REACT_NATIVE_PACKAGER_HOSTNAME envvar的值为$(ipconfig getifaddr en0)。换句话说,.env文件没有计算表达式,而是作为字符串注入。

TLDR:如何将环境变量传递到容器中,其中的值可以是在主机上计算的bash表达式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-10 18:34:16

从HOST_DEVICE_IP文件中删除.env,并在运行docker-compose up时将其设置在命令行中

代码语言:javascript
复制
HOST_DEVICE_IP=$(ipconfig getifaddr en0) docker-compose up -d

但我想知道你是否真的需要这个?如果您在Mac或Windows上,可以使用特殊的主机名host.docker.internal来引用Docker主机。如果您在Linux上,您只需查看容器内的默认网关地址(这将对应于容器连接到的主机上桥接设备的地址)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55618821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档