您的位置:首页 > 运维架构 > Docker

通过docker network 解决容器间相互依赖(Link)的问题

2018-06-20 10:20 1731 查看
在之前的项目中,由于设计都比较合理,很少存在两个容器相互依赖的情况,在本地开发环境,一直使用 docker link 都能完美工作。

最近项目中开发优惠券系统,开发完成后发现优惠券系统依赖了订单系统,订单系统依赖又依赖了优惠券,由于相互依赖,无法启动。

其实在 docker-compose 的官方文档中,已经不推荐使用link,在未来的版本中会被移除,官方的推荐是使用 network。 解决方案就是在 docker-compose.yml 中自定义一个network,指定所有服务都使用这个network。Network 配置中还可以设置服务的别名,同network中的服务可以使用别名访问其他服务。 以下是我本地开发环境配置:

version: '2'
services:
mall_gateway:
image: registry.local.com/org/mall-gateway
networks:
mall-network:
aliases:
- mall_gateway
ports:
- 9009:80
volumes:
- /Users/www/mall-gateway:/data/web_data/app
mall_promotion:
image: registry.local.com/org/mall-gateway
networks:
mall-network:
aliases:
- mall_promotion
ports:
- 9003:80
volumes:
- /Users/www/promotion-system:/data/web_data/app
order:
image: registry.local.com/org/gsp-php-base-dev
networks:
mall-network:
aliases:
- order
ports:
- 9006:80
volumes:
- /Users/www/base_framework/app/order:/data/web_data/web/app/project
env_file:
- /Users/www/base_framework/app/order/config/DEV_ENV_EXAMPLE
product:
image: registry.local.com/org/gsp-php-base-dev
networks:
mall-network:
aliases:
- product
ports:
- 9004:80
volumes:
- /Users/www/base_framework/app/product:/data/web_data/web/app/project
env_file:
- /Users/www/base_framework/app/product/config/DEV_ENV_EXAMPLE

networks:
mall-network:
driver: bridge

其中定义了网络mall-network, 每个服务在network中均定义了别名,服务间可以通过别名相互访问,例如 在order服务中,可以通过 http://product/api 访问商品服务
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息