繁体   English   中英

如何从容器化的 angular 应用程序中访问我的 docker 主机的 IP

[英]How do I access my docker host machine's IP from within an angular app that is containerized

我有一个 angular 应用程序托管在 docker 容器中。 我需要在容器运行的机器之外访问这个 UI。 因此,我需要使用 docker 主机的 IP 地址调用主机上的其他服务。

For this, I need a way to pass the Docker host's IP to my angular app where the URL to another containerized service is generated.

我尝试设置环境变量并传递它,但没有成功找到关于它的 go 的正确方法。

我尝试设置环境变量并传递它,但没有成功找到关于它的 go 的正确方法。

我认为在这里设置环境变量是正确的方法。 一些方法可以在没有主机合作的情况下获取主机的IP地址,但是它们要么不是跨平台的,要么它们获取桥接设备的地址,我认为这不是你要找的.

下面是如何使用环境变量将 IP 从主机传递到容器的示例。 我在 Ubuntu 18.04 上对此进行了测试。

docker run -it -e HOST_IP="$(hostname -I)" debian printenv HOST_IP

说明: -e HOST_IP="$(hostname -I)"部分获取主机的所有 IP 地址,并将其放入名为HOST_IP的环境变量中。 debian部分是我正在使用的图像的名称。 printenv HOST_IP用于打印出HOST_IP环境变量的值。

我找到了答案。

我遵循本教程并使用 webpack 包来访问设置的环境变量: https://codinglatte.com/posts/angular/using-os-environment-variables-in-angular-with-docker/

我没有在 Dockerfile 中设置环境变量,而是在 docker-compose 中设置它:

export somevar = ""
docker-compose $@ build
docker-compose build

docker-compose.yml

ui:

    image: app-ui 

    environment:

    - "host-ip:${somevar}"

如果您使用 Docker for Mac 或 Docker for Windows,您可以使用

host.docker.internal

从 18.03 开始,我们的建议是连接到特殊的 DNS 名称 host.docker.internal,它解析为主机使用的内部 IP 地址。 这是出于开发目的,不适用于 Docker Desktop for Mac/Windows 之外的生产环境。

资料来源: https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds

资料来源: https://docs.docker.com/docker-for-windows/networking/#use-cases-and-workarounds

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM