Я создал службу с именем accountservice
и повторил ее 3 раза после. В моем сервисе я получаю IP-адрес производящего экземпляра сервиса и заполняю его в ответе JSON. Вопрос в том, что каждый раз, когда я запускаю curl $manager-ip:6767/accounts/10000
, возвращаемый IP-адрес совпадает с предыдущим (я пробовал 100 раз)
manager-ip
переменная окружения:
set -x manager-ip (docker-machine ip swarm-manager-1)
Вот мой Dockerfile:
FROM iron/base
EXPOSE 6767
ADD accountservice-linux-amd64 /
ADD healthchecker-linux-amd64 /
HEALTHCHECK --interval=3s --timeout=3s CMD ["./healthchecker-linux-amd64", "-port=6767"] || exit 1
ENTRYPOINT ["./accountservice-linux-amd64"]
А вот мой скрипт автоматизации для создания и запуска сервиса:
#!/usr/bin/env fish
set -x GOOS linux
set -x CGO_ENABLED 0
set -x GOBIN ""
eval (docker-machine env swarm-manager-1)
go get
go build -o accountservice-linux-amd64 .
pushd ./healthchecker
go get
go build -o ../healthchecker-linux-amd64 .
popd
docker build -t azbshiri/accountservice .
docker service rm accountservice
docker service create \
--name accountservice \
--network my_network \
--replicas=1 \
-p 6767:6767 \
-p 6767:6767/udp \
azbshiri/accountservice
А вот функция, которую я вызываю для получения IP:
package common
import "net"
func GetIP() string {
addrs, err := net.InterfaceAddrs()
if err != nil {
return "error"
}
for _, addr := range addrs {
ipnet, ok := addr.(*net.IPNet)
if ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
return ipnet.IP.String()
}
}
}
panic("Unable to determine local IP address (non loopback). Exiting.")
}
И я масштабирую службу, используя следующую команду:
docker service scale accountservice=3