mirror of
https://github.com/clearlinux/docker.git
synced 2026-08-22 05:56:17 +00:00
Do not reference ports for linking containers
This commit is contained in:
@@ -993,7 +993,6 @@ func getLinksJSON(srv *Server, version float64, w http.ResponseWriter, r *http.R
|
||||
ID: l.ID(),
|
||||
To: l.ToID,
|
||||
From: l.FromID,
|
||||
Port: fmt.Sprint(l.Port),
|
||||
Alias: l.Alias,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -125,6 +125,5 @@ type APILink struct {
|
||||
ID string
|
||||
To string
|
||||
From string
|
||||
Port string
|
||||
Alias string
|
||||
}
|
||||
|
||||
+4
-4
@@ -1112,8 +1112,8 @@ func (cli *DockerCli) CmdPs(args ...string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cli *DockerCli) CmdLink(args ...string) error {
|
||||
cmd := Subcmd("link", "[OPTIONS] CONTAINER", "Get the links for a container")
|
||||
func (cli *DockerCli) CmdLinks(args ...string) error {
|
||||
cmd := Subcmd("links", "[OPTIONS] CONTAINER", "Get the links for a container")
|
||||
flRm := cmd.Bool("rm", false, "Remove an existing link by the link ID")
|
||||
|
||||
if err := cmd.Parse(args); err != nil {
|
||||
@@ -1143,10 +1143,10 @@ func (cli *DockerCli) CmdLink(args ...string) error {
|
||||
}
|
||||
w := tabwriter.NewWriter(cli.out, 20, 1, 3, ' ', 0)
|
||||
|
||||
fmt.Fprintf(w, "ID\tFROM\tTO\tPORT\tALIAS")
|
||||
fmt.Fprintf(w, "ID\tFROM\tTO\tALIAS")
|
||||
fmt.Fprintf(w, "\n")
|
||||
for _, l := range links {
|
||||
fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s", l.ID, l.From, l.To, l.Port, l.Alias)
|
||||
fmt.Fprintf(w, "%s\t%s\t%s\t%s", l.ID, l.From, l.To, l.Alias)
|
||||
fmt.Fprintf(w, "\n")
|
||||
}
|
||||
w.Flush()
|
||||
|
||||
+2
-3
@@ -181,7 +181,7 @@ func ParseRun(args []string, capabilities *Capabilities) (*Config, *HostConfig,
|
||||
cmd.Var(&flLxcOpts, "lxc-conf", "Add custom lxc options -lxc-conf=\"lxc.cgroup.cpuset.cpus = 0,1\"")
|
||||
|
||||
var flLinks ListOpts
|
||||
cmd.Var(&flLinks, "link", "Add link to another container (containerid:port:alias)")
|
||||
cmd.Var(&flLinks, "link", "Add link to another container (containerid:alias)")
|
||||
|
||||
if err := cmd.Parse(args); err != nil {
|
||||
return nil, nil, cmd, err
|
||||
@@ -829,10 +829,9 @@ func (container *Container) Start(hostConfig *HostConfig) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p := NewPort(splitProtoPort(parts["port"]))
|
||||
linkedContainer := runtime.Get(parts["id"])
|
||||
|
||||
link, err := runtime.links.NewLink(container, linkedContainer, runtime.networkManager.bridgeIface, p, parts["alias"])
|
||||
link, err := runtime.links.NewLink(container, linkedContainer, runtime.networkManager.bridgeIface, parts["alias"])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -15,9 +15,9 @@ type Link struct {
|
||||
FromIP string
|
||||
ToIP string
|
||||
BridgeInterface string
|
||||
Port Port
|
||||
Alias string
|
||||
FromEnvironment []string
|
||||
ports []Port
|
||||
isEnabled bool
|
||||
}
|
||||
|
||||
@@ -25,22 +25,25 @@ type LinkRepository struct {
|
||||
links map[string]*Link
|
||||
}
|
||||
|
||||
func (r *LinkRepository) NewLink(to, from *Container, bridgeInterface string, p Port, alias string) (*Link, error) {
|
||||
func (r *LinkRepository) NewLink(to, from *Container, bridgeInterface string, alias string) (*Link, error) {
|
||||
if !from.State.Running {
|
||||
return nil, fmt.Errorf("Cannot link to a non running container: %s AS %s", from.ID, alias)
|
||||
}
|
||||
if !from.Exposes(p) {
|
||||
return nil, fmt.Errorf("Cannot link to %s because %s is not exposed", from.ID, p)
|
||||
ports := make([]Port, len(from.Config.ExposedPorts))
|
||||
var i int
|
||||
for k := range from.Config.ExposedPorts {
|
||||
ports[i] = k
|
||||
i++
|
||||
}
|
||||
l := &Link{
|
||||
FromID: utils.TruncateID(from.ID),
|
||||
ToID: utils.TruncateID(to.ID),
|
||||
BridgeInterface: bridgeInterface,
|
||||
Alias: alias,
|
||||
Port: p,
|
||||
FromIP: from.NetworkSettings.IPAddress,
|
||||
ToIP: to.NetworkSettings.IPAddress,
|
||||
FromEnvironment: from.Config.Env,
|
||||
ports: ports,
|
||||
}
|
||||
if err := r.registerLink(l); err != nil {
|
||||
return nil, err
|
||||
@@ -53,7 +56,12 @@ func (l *Link) ID() string {
|
||||
}
|
||||
|
||||
func (l *Link) ToEnv() []string {
|
||||
env := []string{fmt.Sprintf("%s_ADDR=%s://%s:%s", strings.ToUpper(l.Alias), l.Port.Proto(), l.FromIP, l.Port.Port())}
|
||||
env := []string{}
|
||||
// Load exposed ports into the environment
|
||||
for _, p := range l.ports {
|
||||
env = append(env, fmt.Sprintf("%s_%s_ADDR=%s://%s:%s", strings.ToUpper(l.Alias), p.Port(), p.Proto(), l.FromIP, p.Port()))
|
||||
}
|
||||
|
||||
if l.FromEnvironment != nil {
|
||||
for _, v := range l.FromEnvironment {
|
||||
parts := strings.Split(v, "=")
|
||||
@@ -83,24 +91,26 @@ func (l *Link) Disable() {
|
||||
}
|
||||
|
||||
func (l *Link) toggle(action string) error {
|
||||
if err := iptables.Raw(action, "FORWARD",
|
||||
"-i", l.BridgeInterface, "-o", l.BridgeInterface,
|
||||
"-p", l.Port.Proto(),
|
||||
"-s", l.ToIP,
|
||||
"--dport", l.Port.Port(),
|
||||
"-d", l.FromIP,
|
||||
"-j", "ACCEPT"); err != nil {
|
||||
return err
|
||||
}
|
||||
for _, p := range l.ports {
|
||||
if err := iptables.Raw(action, "FORWARD",
|
||||
"-i", l.BridgeInterface, "-o", l.BridgeInterface,
|
||||
"-p", p.Proto(),
|
||||
"-s", l.ToIP,
|
||||
"--dport", p.Port(),
|
||||
"-d", l.FromIP,
|
||||
"-j", "ACCEPT"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := iptables.Raw(action, "FORWARD",
|
||||
"-i", l.BridgeInterface, "-o", l.BridgeInterface,
|
||||
"-p", l.Port.Proto(),
|
||||
"-s", l.FromIP,
|
||||
"--sport", l.Port.Port(),
|
||||
"-d", l.ToIP,
|
||||
"-j", "ACCEPT"); err != nil {
|
||||
return err
|
||||
if err := iptables.Raw(action, "FORWARD",
|
||||
"-i", l.BridgeInterface, "-o", l.BridgeInterface,
|
||||
"-p", p.Proto(),
|
||||
"-s", l.FromIP,
|
||||
"--sport", p.Port(),
|
||||
"-d", l.ToIP,
|
||||
"-j", "ACCEPT"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ func migratePortMappings(config *Config) error {
|
||||
}
|
||||
|
||||
// Links come in the format of
|
||||
// id:port:alias
|
||||
// id:alias
|
||||
func parseLink(rawLink string) (map[string]string, error) {
|
||||
return utils.PartParser("id:port:alias", rawLink)
|
||||
return utils.PartParser("id:alias", rawLink)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user