2017-09-05 74 views
0

我有一個支持Docker的ASP NET Core應用程序。ASP NET核心:docker-compose中的別名不會出現在/ etc/hosts中

泊塢窗,撰寫文件看起來像這樣:

version: '3' 

services: 
    test: 
    image: test 
    build: 
     context: ./Test 
     dockerfile: Dockerfile 
    networks: 
     test_nw: 
     aliases: 
      - test_alias 

    oracledb: 
    image: sath89/oracle-12c 
    ports: 
     - "1521:1521" 
    networks: 
     test_nw: 
     aliases: 
      - oracledb_alias 

networks: 
    test_nw: 

但是從我在ASP.NET應用程序的核心的容器看了應用後(做cker exec -it ... bash),並檢查了/etc/hosts文件,但各自的別名DB oracledb_alias未顯示在其中。因此,在連接字符串中使用oracledb_alias作爲主機名時,應用程序找不到數據庫。

我做錯了什麼?我該如何解決這個問題?

回答

0

你沒有做錯任何事。 Docker的早期版本用於使用/etc/hosts來解析主機名和鏈接。現在碼頭使用一個內部的DNS服務器。

所以你不會看到任何信息。然後,唯一可以做的事情是使用命令和測試,如果你能達到解析名稱或不

$ dig oracledb_alias 
$ ping oracledb_alias 
$ telnet oracledb_alias 1521 

請參見下面的鏈接查看更多細節

https://docs.docker.com/engine/userguide/networking/configure-dns/

+0

我明白了。當我通過docker檢查網絡時,我可以在「容器」下看到正確的IP地址:但名稱看起來不對。它說「dockercompose9881130304305912251_oracledb_1」。但我認爲這個名字是「oracledb」。 – Palmi

+0

這是容器的名稱。容器網絡中的容器仍然可以使用'oracledb'來解析。主機上的容器名稱必須是唯一的,所以docker-compose混合文件夾名稱,服務名稱和實例號 –

+0

好的。在容器內對其他容器進行Ping工作。 – Palmi