动态docker组合运行时环境变量

动态docker组合运行时环境变量,docker,docker-compose,environment-variables,containers,Docker,Docker Compose,Environment Variables,Containers,我有一个本地开发设置,通过隧道连接到远程数据库实例,并通过计算机上的端口公开该实例 我的机器也是一个docker容器的主机,我想连接到这个远程数据库 为此,我无法转发localhost上的端口(这意味着Docker容器中的某些内容不同),因此我将其转发到本地IP地址 ifconfig en0 | awk'$1==“inet”{print$2}输出10.0.0.5 ssh -N -L 10.0.0.5:9876:database-instance.website.com:9876 instance

我有一个本地开发设置,通过隧道连接到远程数据库实例,并通过计算机上的端口公开该实例

我的机器也是一个docker容器的主机,我想连接到这个远程数据库

为此,我无法转发
localhost
上的端口(这意味着Docker容器中的某些内容不同),因此我将其转发到本地IP地址

ifconfig en0 | awk'$1==“inet”{print$2}
输出10.0.0.5

ssh -N -L 10.0.0.5:9876:database-instance.website.com:9876 instance-to-tunnel-through.website.com
et

现在,在我的
docker compose yml
中,我可以做:

version: "3"

my-app
  ports:
    - 5000:5000 # expose app to host on port 5000
  build: ./my-app # point to my-app's Dockerfile
  environment:
    - HOST_IP=10.0.0.5
然后在应用程序内部,我可以引用
主机IP
。这是可行的,但这意味着每次切换网络时,我都必须更改我的
docker compose.yml
,这是一种痛苦

理想情况下,我希望在容器启动时为其提供
ifconfig
的当前输出

我已经看过docker
.env
文件,但它似乎只包含静态数据。
我已经在
Dockerfile

中查看了
RUN
,我觉得您应该研究一下服务发现的概念,它基本上会用您传入的名称注册您的服务,并在您关闭服务时删除关联。@zenwraight是否仍然适用于本地开发?在实际部署的应用程序上,我的主机名是静态的。是的,您也可以在本地开发中使用它。我也不是这方面的专家,只是知道理论上你可以看看nginx服务器,它提供了所有这些功能。