2017-09-06 58 views
0

我想使用scale,但是我需要爲每個節點使用不同的卷和端口映射。docker-compose scale with separate volumes

我該怎麼做?理想情況下,我需要某種環境變量或運行腳本來爲每個新實例分配一個卷和端口。

這樣做的建議方法是什麼?

+1

我爲我的下一篇文章一種可能的方法工作,將與您分享不久偉大 –

+0

!請在這裏發佈您的文章的鏈接! – purpletentacle

回答

0

我知道這可能不是一個完美的解決方案,但如果你不介意在節點之間共享數據,它確實很好。我使用這個進行本地測試,所以對我來說這是安全的。

多克爾 - compose.yml

... 
volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 
... 

Dockerfile

... 
RUN pip3 install docker 
... 

在每個節點中,我部署以下腳本get_name.py

from docker import Client 
import os 

hostname = os.environ['HOSTNAME'] 

cli = Client(base_url='unix://var/run/docker.sock') 
data = cli.containers() 

for d in data: 
    id = d['Id'][:12] 
    names = d['Names'] 
    if id == hostname: 
     print(names[0]) 
     quit() 

print(hostname) 

而當節點啓動(start.sh)它查詢它的名字,並創建一個符號鏈接到對應的摹子目錄:

... 
NODE_NAME=$(python /root/scripts/get_name.py) 
OWN_VOLUME_NAME="/shared_volumes${NODE_NAME}" 
ln -s ${OWN_VOLUME_NAME} /data 
...