2017-07-31 99 views
2

我有兩個容器中,我怎麼能在Python文件與Django的Web服務器Docker-compose在python文件中包含服務名稱的訪問容器?

多克爾 - compose.yml文件訪問另一個容器

version: '2' 

services: 

    web: 
    build: ./web/ 
    command: python3 manage.py runserver 0.0.0.0:8001 
    volumes: 
     - ./web:/code 
    ports: 
     - "8001:80" 
    networks: 
     - dock_net 
    container_name: con_web 
    depends_on: 
     - "api" 
    links: 
     - api 
    api: 
    build: ./api/ 
    command: python3 manage.py runserver 0.0.0.0:8000 
    volumes: 
     - ./api:/code 
    ports: 
     - "8000:80" 
    networks: 
     - dock_net 
    container_name: con_api 

networks: 
    dock_net: 
     driver: bridge 

Python的文件:

我可以從mail_string形式

mail = request.POST.get('mail_string', '') 
    url = 'http://con_api:8000/api/'+mail+'/?format=json' 
    resp = requests.get(url=url)   
    return HttpResponse(resp.text) 

我請求API容器並獲得價值,但我不知道IP地址

+0

是的,這很好!但是,如果它是狀態更新或問題,我會感到困惑嗎? – Ayushya

回答

0

更新回答

在你的Python文件,你可以使用url = 'http://api/'+mail+'/?format=json'。這將使您能夠訪問您試圖從中獲取請求的網址。

原來的答案

如果兩個容器是獨立的,那麼你可以創建一個network,當你做出兩個相同的網絡的一部分,那麼你可以使用自己的主機名,您可以通過指定訪問它們的容器--hostname=HOSTNAME


另一個簡單的方法是使用默認創建一個網絡,並在文件中聲明的所有服務是網絡的一部分,碼頭工人,撰寫文件。由此您可以通過其服務名稱訪問其他服務。單純地喜歡http://container1/當你的搬運工,撰寫文件是這樣的:

version: '3' 
services: 

    container1: 
    image: some_image 

    container2: 
    image: another_or_same_image 

現在通過進入container2的:

docker exec -it container2 /bin/bash

和運行ping http://contianer1

您將收到的數據包,因此能夠訪問其他容器。

+0

我可以這個,但我不能在python文件中這個 –

+0

我給出的答案是完整的,你得到一個URL,你可以在你的python文件中使用。如果你不熟悉docker-compose,並且使用docker run運行容器,我已經給出了使用容器的另一個答案[這裏](https://stackoverflow.com/a/45197727/6207775)。 – Ayushya

+0

你能舉個例子嗎?我嘗試使用python文件中的服務獲取IP地址,但打印service_name –

相關問題