如何在 docker 图像中创建一个非硬编码的 URL 路径来调用后端服务?
how to make a non-hardcoded URL path in docker image to call backend service?
我是 docker 的新人。让我描述一下我的场景:
我为 Web 应用程序制作了 2 docker 个图像。一张图片是用于展示的前端 web 层,另一张是提供 REST 服务的后端层。
所以我需要 运行 2 个容器用于这 2 个图像。前端调用后端服务。现在我需要在前端的代码中编写后端的 URL 并构建图像...我认为这不是微服务的正确方法...
因为如果我的笔记本电脑的IP改变了或者其他人想使用我的图像,他们就无法获得服务...所以我如何才能使URL变量使我的前端图像可以用于其他没有重建?
谢谢!
您可以通过在 运行 容器时将环境变量传递给 docker 容器来做到这一点。
像这样:
docker run --name frontend -e MY_APP_BACKEND_IP="192.168.7.2" -e MY_APP_BACKEND_PORT="3000" ...
而在 back-end 上,假设您使用的是 NodeJS,您可以:
var backend_ip = process.env.MY_APP_BACKEND_IP;
注意:不是 NodeJS 专业人士,但一些谷歌搜索告诉我如何去做
从 Docker 1.10 开始,您可以使用 networking。这样做是将 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
可用 here or you can follow a guide like this Composing Multi-container Networks with Docker Compose
中阅读更多相关信息
我是 docker 的新人。让我描述一下我的场景: 我为 Web 应用程序制作了 2 docker 个图像。一张图片是用于展示的前端 web 层,另一张是提供 REST 服务的后端层。
所以我需要 运行 2 个容器用于这 2 个图像。前端调用后端服务。现在我需要在前端的代码中编写后端的 URL 并构建图像...我认为这不是微服务的正确方法...
因为如果我的笔记本电脑的IP改变了或者其他人想使用我的图像,他们就无法获得服务...所以我如何才能使URL变量使我的前端图像可以用于其他没有重建?
谢谢!
您可以通过在 运行 容器时将环境变量传递给 docker 容器来做到这一点。
像这样:
docker run --name frontend -e MY_APP_BACKEND_IP="192.168.7.2" -e MY_APP_BACKEND_PORT="3000" ...
而在 back-end 上,假设您使用的是 NodeJS,您可以:
var backend_ip = process.env.MY_APP_BACKEND_IP;
注意:不是 NodeJS 专业人士,但一些谷歌搜索告诉我如何去做
从 Docker 1.10 开始,您可以使用 networking。这样做是将 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
可用 here or you can follow a guide like this Composing Multi-container Networks with Docker Compose