docker-compose scale - 代理实例id

时间:2017-09-08 08:08:06

标签: docker containers docker-compose

当我使用docker-compose scale时,我希望在yml文件中使用实例ID。

搬运工-compose.yml:

myservice:
  volumes:
  - ./volumes/foo{AGENT_ID}/bar:/foo/bar

我已经看过围绕这个主题的很多讨论,但我还没有找到明确的答案。

我可以用这种方式使用环境变量或类似物吗?如果我可以在bash脚本等中使用它,那将是理想的。

1 个答案:

答案 0 :(得分: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
...