diff --git a/prog/weaveproxy/main.go b/prog/weaveproxy/main.go index 23073b74..60d3cc80 100644 --- a/prog/weaveproxy/main.go +++ b/prog/weaveproxy/main.go @@ -59,6 +59,8 @@ func main() { Log.Fatalf("Could not start proxy: %s", err) } - go p.ListenAndServe() + listeners := p.Listen() + p.AttachExistingContainers() + go p.Serve(listeners) SignalHandlerLoop() } diff --git a/proxy/proxy.go b/proxy/proxy.go index 88ec5085..cff7f773 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -93,6 +93,15 @@ func NewProxy(c Config) (*Proxy, error) { return p, nil } +func (proxy *Proxy) AttachExistingContainers() { + containers, _ := proxy.client.ListContainers(docker.ListContainersOptions{}) + for _, cont := range containers { + if strings.HasPrefix(cont.Command, weaveWaitEntrypoint[0]) { + proxy.ContainerStarted(cont.ID) + } + } +} + func (proxy *Proxy) Dial() (net.Conn, error) { return net.Dial("unix", dockerSock) } @@ -131,7 +140,7 @@ func (proxy *Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) { proxy.Intercept(i, w, r) } -func (proxy *Proxy) ListenAndServe() { +func (proxy *Proxy) Listen() []net.Listener { listeners := []net.Listener{} addrs := []string{} for _, addr := range proxy.ListenAddrs { @@ -146,7 +155,10 @@ func (proxy *Proxy) ListenAndServe() { for _, addr := range addrs { Log.Infoln("proxy listening on", addr) } + return listeners +} +func (proxy *Proxy) Serve(listeners []net.Listener) { errs := make(chan error) for _, listener := range listeners { go func(listener net.Listener) {