我是 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 专业版,但一些谷歌搜索向我展示了如何做到这一点