如何在 docker 镜像中制作非硬编码的 URL 路径来调用后端服务



我是 docker 的新手。让我描述一下我的场景:我为 Web 应用程序制作了 2 个 docker 映像。一个图像是用于演示的前端 Web 层,另一个是提供 REST 服务的后端层。

所以我需要为这 2 个图像运行 2 个容器。 前端在后端调用服务。现在我需要在前端的代码中编写后端的 URL 并构建映像......我不认为这是微服务的正确方式......

因为如果我的笔记本电脑的IP发生变化或其他人想使用我的图像,他们将无法获得服务...那么,如何制作 URL 变量并使我的前端图像可以在不重建的情况下用于其他人呢?

感谢!

从 Docker 1.10 开始,您可以使用网络。 这样做是将 docker 容器的 IP 地址绑定到可以在容器中使用的主机名。

如果使用 docker-compose ,则会自动创建一个网络,并且两个服务可以相互通信。 下面是一个示例:

version: "2"
services:
  frontend:
    image: nginx
    networks:
      - my-network
    environment:
      BACKEND_URL: "http://backend"
  backend:
    image: mariadb
    networks:
      - my-network
    environment:
      FRONTEND_URL: "http://frontend"
networks:
  my-network:
    driver: bridge

您可以在此处提供Getting started with multi-host networking中阅读有关此内容的更多信息,也可以按照这样的指南进行操作 使用 Docker Compose 编写多容器网络

您可以通过

在运行时将环境变量传递给 docker 容器来执行此操作。

像这样:

docker run --name frontend -e MY_APP_BACKEND_IP="192.168.7.2" -e MY_APP_BACKEND_PORT="3000" ...

在后端,假设你正在使用 NodeJS,你可以这样做:

var backend_ip   = process.env.MY_APP_BACKEND_IP;

注意:不是 NodeJS 专业版,但一些谷歌搜索向我展示了如何做到这一点

最新更新