如何在Docker镜像中创build一个非硬编码的URLpath来调用后端服务?

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

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

因为如果我的笔记本电脑的IP变化或其他人想要使用我的形象,他们不能得到服务…那么我怎么能让urlvariables,使我的前端图像可以用于其他人没有重build?

谢谢!

您可以在运行时将环境variables传递给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专业版,但是一些Googlesearch向我展示了如何去做

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

如果使用docker-compose ,则会自动创build一个networking,这两个服务可以相互通信。 这是一个例子:

 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编写多容器networking