1

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

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

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

谢谢!

4

2 回答 2

1

从 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 组合多容器网络

于 2017-02-14T03:48:12.410 回答
0

您可以通过在运行 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 专业人士,但一些谷歌搜索向我展示了如何做到这一点

于 2017-02-14T03:43:11.597 回答