2017-09-10 42 views
0

我在docker中創建了一個web應用程序。我的webapp使用其他碼頭圖像,例如redis,mariadb。這些都在本地運行。現在我創建了一個我的webapp的圖像。所以我有三個圖像:webapp(這不是up),redis和mariadb都已經啓動了。使圖像彼此通信Docker

當我試圖運行我的web應用程序的圖像無法啓動..它無法與其他圖像(redis和mariadb)連接。

我怎樣才能讓我的web應用程序的圖像通過使用在鏈路溝通,讓你也有能力sharing environmental variables between containers與其他需要的圖像

回答

1

你可以做到這一點溝通。

https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/

爲了幫助你,我爲你提供在圖像被連接在一起泊塢窗,撰寫文件的例子。在我的示例中,該應用程序與databaseredis進行通信。

version: '2' 
services: 
    app: 
    extends: 
     service: app 
    volumes: 
     - .:/var/www/app 
    links: 
     - db 
     - redis 
    nginx: 
    extends: 
     service: nginx 
    links: 
     - app 
    redis: 
    extends:  
     service: redis 
    db: 
    image: postgres:9 
    volumes: 
     - db_data:/var/lib/postgres 
    restart: always 

另一種方法是使用網絡命令: https://docs.docker.com/engine/userguide/networking/work-with-networks/

1

你需要創建一個泊塢窗網所有容器連接在一起。

docker network create net

然後你就可以與網絡選項啓動容器:

docker run --network net ...

,或者如果容器已在運行,你可以將它們連接到網絡

docker network connect net <container-name>

一旦你這樣做,容器可以溝通相互使用容器名稱作爲主機名,例如:redis,mongo ...

+0

它不工作。我有一個默認網絡,它連接了redis和mariadb。現在當我做「碼頭運行 - 網絡默認webapp」它給錯誤「無法連接到數據庫」:( – Abhishek

+0

@Abhishek你命名db容器並使用該名稱作爲主機名?也可以嘗試執行到其中一個容器,並嘗試使用容器名稱ping其他容器 – yamenk

+0

沒問題redis和mariadb已經在運行,我嘗試從mariadb容器中ping redis,它可以ping通,但是我的webapp無法ping,因爲它沒有運行。運行「docker run --network default webapp」但它並沒有啓動 – Abhishek