2017-03-22 36 views
0

我使用Docker-Compose。如何獲得一個碼頭集裝箱的IP和端口從另一個環境變量?

前段時間我用過這段代碼。 Nginx使用來自像「API_PORT_5432_TCP_ADDR」「API_PORT_5432_TCP_PORT」這樣的環境變量的ip和端口。

現在我不能從一個容器連接到其他容器。我在文檔中發現了一些描述,「鏈接」應該做這樣的工作,我的意思是它創建了環境變量,之後我可以在其他容器中獲取它。但我不知道,我做錯了什麼。有沒有辦法解決這個問題?如果你給我鏈接或一些代碼行,會很高興。

謝謝。

version: '3.0' 
    services: 
     ubuntubase: 
     build: ./ubuntu-base 
     backend: 
      build: ./backend 
      links: 
       - postgresql:db 
      expose: 
       - "6060" 
      depends_on: 
       - ubuntubase 
       - postgresql 
     nginxreverseproxy: 
      build: ./nginx-reverse-proxy 
      expose: 
       - "80" 
       - "443" 
      links: 
       - backend:api 
      ports: 
       - "80:80" 
      volumes: 
       - ./logs/:/var/log/nginx/ 
      depends_on: 
       - ubuntubase 
       - backend 


     postgresql: 
     restart: always 
     image: sameersbn/postgresql:9.6-2 
     expose: 
      - "5432" 
     depends_on: 
      - ubuntubase 
     environment: 
      - DEBUG=false 
      - DB_USER=... 
      - DB_PASS=... 
      - DB_NAME=... 
     volumes: 
      - /srv/docker/postgresql:/var/lib/postgresql 

回答

1

links不能通過環境變量工作。它通過將服務的名稱公開爲DNS主機名來工作。因此,在您的示例中,您的「nginxreverseproxy」服務可以使用主機名「api」連接到「後端」服務。

默認情況下,這些鏈接使用該服務,即名稱,如果你已經指定:

links: 
    - backend 

然後你將連接到「後臺」。如果您提供了另一個名稱(就像您對「api」所做的那樣),那麼該名稱將作爲別名公開。

但是,這不會傳達端口。如果你想使用非默認端口,你可能需要自己設置一個環境變量,然後告訴服務使用它。

例如,您的「後端」會顯示端口6060.如果您的「nginxreverseproxy」不知道,可以使用環境變量來告訴它。

nginxreverseproxy: 
    environment: 
    - BACKEND_PORT=6060 

然後告訴nginx服務使用該環境變量加上主機名「api」來連接。

相關問題