如何在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