我试图将一些现有服务器移动到Docker容器中。我有两个:一个app服务器和一个api服务器,但是用node.js开发。我让他们都在ubuntu vm中工作,并且可以从vm之外的两个应用程序中运行,这很棒。
每个服务器都拥有自己的域名。应用服务器使用域应用,api服务器使用 api 域,我知道这很聪明。在本地我将两个域都添加到我的hosts文件中,指向分配给ubuntu vm的ip。
我遇到的唯一问题是应用服务器发送的请求需要路由到api服务器。尝试编辑app服务器容器(通过Dockerfile)和ubuntu vm的hosts文件,但请求失败。
是否有一种简单的方法可以让该请求不出去并尝试解析 api 域,但让它指向api容器?
答案 0 :(得分:3)
典型的解决方案是使用Docker的--link
选项来链接容器。也就是说,如果你这样做:
docker run -d --name api myapi
docker run -d --name app --link api:api myapp
然后在app
容器中,主机名api
将映射到api
容器。您还将拥有一组可用的环境变量,用于描述链接容器上的公开端口。例如,如果你的" api"容器暴露端口80,变量看起来像:
API_PORT_80_TCP=tcp://172.17.0.10:80
API_PORT_80_TCP_PORT=80
API_PORT_80_TCP_PROTO=tcp
API_PORT=tcp://172.17.0.10:80
API_NAME=/app/api
API_PORT_80_TCP_ADDR=172.17.0.10
链接选项有一些缺点:
如果您在多主机环境中运行,可以通过您选择的业务流程工具解决这两个特定问题。
答案 1 :(得分:0)
链接功能( - link)是一项传统功能。
您应该始终更喜欢使用Docker网络驱动程序而非链接。
示例:运行Redis容器,Redis绑定到localhost,然后运行redis-cli命令并通过localhost接口连接到Redis服务器。
$ docker run -d --name redis example/redis --bind 127.0.0.1
$ # use the redis container's network stack to access localhost
$ docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1
有关详细信息,请参阅文档。
How do you force Visual Studio to regenerate the .designer files for aspx/ascx files?