我正在尝试创建运行Elixir节点的可扩展的docker容器。目前我有这个:
client:
image: elixir:alpine
command:
elixir --name client@somewhere.localdomain --cookie pass
-S mix run --no-halt -e Connect.main ${CONTROLLER}
depends_on:
- system_control
elixir节点只是使用Node.connect
来通知控制器它的存在。但是,如果我尝试使用docker-compose up --scale client=5
创建更多客户端节点,那么只有第一个能够连接,其余的被拒绝(可能),因为硬编码--name
导致了名称冲突。知道如何规避吗?有没有办法获得一些唯一的ID而不是somewhere
?
编辑:我的Connect.main elixir脚本(删节):
defmodule Connect do
def main do
[server] = System.argv
IO.puts "#{Node.self} - Connecting to #{server} - #{ Node.connect(:'#{server}') }
end
end
答案 0 :(得分:0)
使用随机组件分配名称可以解决您的问题。确保它足够随机,重复是非常不可能的。您可能希望在某些情况下避免使用this Docker-Compose issue
中建议的顺序ID正如@ fl9建议的那样,使用某种命令行UUID生成器(如uuidgen
)可能能够解决问题。