Docker版本:版本17.03.0-ce-mac2(15654)
操作系统: macOS Sierra
我正在尝试使用docker-compose设置HA环境。快速概述拓扑可能是什么样的,我将至少有两个keepalived和haproxy运行实例,haproxy将在多个服务器前面。但是,在这篇文章中,为了简化,我只引用了一个keepalived,haproxy和server实例。
我现在遇到的问题是我无法将流量定向到我分配给keepalived的虚拟IP地址。为了在我的docker compose文件中进行测试,我有一个尝试使用VIP进行通信的客户端,它会导致连接被拒绝错误。
dial tcp 192.168.99.120:80: getsockopt: connection refused
但是,如果我直接与haproxy联系,则没有连接问题。此外,我可以直接与主机的haproxy通信,但不能保持原状。
我觉得这与网络如何在docker中工作有关,但我很擅长使用docker并且无法追踪问题。任何帮助将不胜感激。
我的配置文件都包含在下面。
搬运工-compose.yml:
version: '2'
services:
keepalived1:
image: neoassist/docker-keepalived:latest
container_name: keepalived1
volumes:
- "./keepalived.conf:/etc/keepalived/keepalived.conf"
environment:
- VIRTUAL_IP=192.168.99.120
- VIRTUAL_MASK=24
- VRID=1
- CHECK_IP=any
- CHECK_PORT=80
- INTERFACE=eth0
entrypoint: sh -c 'sleep 4;/usr/bin/keepalived.sh'
network_mode: "host"
cap_drop:
- NET_ADMIN
privileged: true
haproxy1:
image: haproxy:latest
container_name: haproxy1
ports:
- 7054:7054
volumes:
- "./haproxy1.cfg:/usr/local/etc/haproxy/haproxy.cfg"
environment:
- EXPOSE=7054
links:
- fabric-ca-server1:fabric-ca-server1
fabric-ca-server1:
image: hyperledger/fabric-ca
container_name: fabric-ca-server1
ports:
- 7051:7054
environment:
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
volumes:
- "./fabric-ca-server:/etc/hyperledger/fabric-ca-server"
command: sh -c "fabric-ca-server start -d -b admin:adminpw"
admin-client:
image: hyperledger/fabric-ca
container_name: admin-client
network_mode: "host"
command: sh -c "sleep 14;fabric-ca-client enroll -d -u http://admin:adminpw@192.168.99.120"
haproxy.cfg
global
maxconn 4096
defaults
mode http
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
frontend server
bind *:7054
mode tcp
default_backend server_cluster
backend server_cluster
balance source
mode tcp
option tcpka
server server1 fabric-ca-server1:7054
keepalived.conf
vrrp_script haproxy {
script "pidof haproxy"
interval 2
weight 2
}
vrrp_instance haproxy_1 {
virtual_router_id 1
advert_int 1
interface eth0
nopreempt
state BACKUP
virtual_ipaddress {
192.168.99.120/24 dev eth0
}
track_script {
haproxy
}
}
来自我的mac的ifconfig有:
vboxnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 0a:00:27:00:00:00
inet 192.168.99.1 netmask 0xffffff00 broadcast 192.168.99.255
答案 0 :(得分:0)
我不认为这将适用于Docker for Mac,因为它实际上使用了一个虚拟机来运行你的Docker容器。如果您尝试使用主机网络而不是桥接网络,则此应该在具有本机Docker支持的系统上工作。
我的建议是查看Docker swarm模式(不是独立的Docker swarm)或Kubernetes,它们都提供扩展服务的机制,并通过单个地址提供跨平台的负载平衡