2017-05-29 25 views
0

我正在使用docker撰寫一個用asp.net核心,postgres和redis創建的web應用程序。我將所有的東西都設置爲使用我在docker-compose.yml文件中指定的服務名稱連接到postgres。當試圖用redis做同樣的事時,我得到一個異常。經過研究發現,這個例外是一個已知問題,解決方法是使用機器的IP地址而不是主機名。但是我無法弄清楚如何從撰寫文件中獲取redis服務的ip地址。有沒有辦法做到這一點?如何在Docker compse網絡中使用ipaddreses代替容器名稱

編輯

這裏是撰寫文件

version: "3" 

services: 
    postgres: 
     image: 'postgres:9.5' 
     env_file: 
     - '.env' 
     volumes: 
     - 'postgres:/var/lib/postgresql/data' 
     ports: 
     - '5433:5432' 
    redis: 
     image: 'redis:3.0-alpine' 
     command: redis-server --requirepass devpassword 
     volumes: 
     - 'redis:/var/lib/redis/data' 
     ports: 
     - '6378:6379' 
    web: 
     build: . 
     env_file: 
      - '.env' 
     ports: 
      - "8000:80" 
     volumes: 
      - './src/edb/Controllers:/app/Controllers' 
      - './src/edb/Views:/app/Views' 
      - './src/edb/wwwroot:/app/wwwroot' 
      - './src/edb/Lib:/app/Lib' 
volumes: 
    postgres: 
    redis: 
+0

你能告訴我們你的docker-compose文件嗎? – Gintoki

+0

我已經添加了撰寫文件 – decapo

+0

,您需要鏈接您的服務,然後通過和環境變量訪問它們[更多信息](https://docs.docker.com/compose/compose-file/#links) – Gintoki

回答

0

好吧,我找到了答案。這是我正在嘗試的東西,但沒有意識到每次重新啓動容器時地址可能會發生變化。

運行docker ps以獲取運行有效內容的列表,然後複製容器的ID並運行docker inspect {container_id},然後將輸出可從其他運行容器中訪問的ipaddress。

我感到困惑的原因是因爲容器啓動時該地址可能會改變。所以我不得不猜測在啓動容器之前IP地址是什麼。幸運的是,5次後,我猜對了。

+0

您可以定義一個網絡並指定一個IP。詳情:https://docs.docker.com/compose/compose-file/#ipv4_address-ipv6_address –

+0

謝謝,我目前正在用c#解決它啓動,因爲這只是一個開發環境。我推動它blumix,它必須在生產中做同樣的事情,所以我suppling環境變量,並讓它得到的基礎上的IP。 – decapo

相關問題