在以前的項目中,因爲設計都比較合理,不多存在兩個容器相互依賴的狀況,在本地開發環境,一直使用 docker link 都能完美工做。php
最近項目中開發優惠券系統,開發完成後發現優惠券系統依賴了訂單系統,訂單系統依賴又依賴了優惠券,因爲相互依賴,沒法啓動。nginx
其實在 docker-compose 的官方文檔中,已經不推薦使用link,在將來的版本中會被移除,官方的推薦是使用 network。 解決方案就是在 docker-compose.yml 中自定義一個network,指定全部服務都使用這個network。Network 配置中還能夠設置服務的別名,同network中的服務能夠使用別名訪問其餘服務。 如下是我本地開發環境配置:web
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 訪問商品服務docker