gpt4 book ai didi

docker - 如何在注入(inject) docker 容器之前评估主机上的环境变量 bash 表达式?

转载 作者:行者123 更新时间:2023-12-02 21:09:34 24 4
gpt4 key购买 nike

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

似乎传递此类环境变量的正确方法是通过 dot-env file placed in the current working directory .请参阅下面的当前代码:

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 启动服务时, REACT_NATIVE_PACKAGER_HOSTNAME envvar 的值为 $(ipconfig getifaddr en0) .换句话说, .env文件没有评估表达式,而是作为字符串注入(inject)。

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

最佳答案

删除 HOST_DEVICE_IP来自您的.env文件,而是在运行 docker-compose up 时在命令行中设置它:

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

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

关于docker - 如何在注入(inject) docker 容器之前评估主机上的环境变量 bash 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55618821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com