title: Change default route in docker container
body: <p>I have a docker container that is connected to two networks, the default bridge and a custom bridge. Via the default, it is linked to another container only in the default network and via the custom bridge, it gets an IP address in local network.</p>
  
  <pre><code>LAN -- [homenet] -- container1 -- [bridge] -- container2
  
  sudo docker network inspect homenet
  [{  "Name": "homenet",
      "Scope": "local",
      "Driver": "bridge",
      "EnableIPv6": false,
      "IPAM": {
          "Driver": "default",
          "Options": {},
          "Config": [{ "Subnet": "192.168.130.0/24",
                       "Gateway": "192.168.130.8",
                       "AuxiliaryAddresses": { "DefaultGatewayIPv4": "192.168.130.3" }}]
      },
      "Internal": false,
      "Containers": {
          "$cid1": { "Name": "container",
                     "EndpointID": "$eid1_1",
                     "MacAddress": "$mac1_1",
                     "IPv4Address": "192.168.130.38/24", }
      },
      "Options": { "com.docker.network.bridge.name": "br-homenet" },
      "Labels": {}}]
  </code></pre>
  
  <p>and bridge:</p>
  
  <pre><code>sudo docker network inspect bridge
  
  [{
      "Name": "bridge",
      "Scope": "local",
      "Driver": "bridge",
      "EnableIPv6": false,
      "IPAM": {
          "Driver": "default",
          "Options": null,
          "Config": [{ "Subnet": "172.17.0.0/16" }]
      },
      "Internal": false,
      "Containers": { 
        "$cid2": {
              "Name": "container2",
              "EndpointID": "$eid2",
              "MacAddress": "$mac2",
              "IPv4Address": "172.17.0.2/16",
              "IPv6Address": "" }, 
        "$cid1": {
              "Name": "container1",
              "EndpointID": "$eid1_2",
              "MacAddress": "$mac1_2",
              "IPv4Address": "172.17.0.3/16",
              "IPv6Address": "" }
      },
      "Options": {
          "com.docker.network.bridge.default_bridge": "true",
          "com.docker.network.bridge.enable_icc": "true",
          "com.docker.network.bridge.enable_ip_masquerade": "true",
          "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
          "com.docker.network.bridge.name": "docker0",
          "com.docker.network.driver.mtu": "1500"
      },
      "Labels": {}
  }]
  </code></pre>
  
  <p>This works pretty well from the internal network, however, I have a routing problem:</p>
  
  <pre><code>sudo  docker exec -it container1 route -n
  
  Kernel IP routing table
  Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
  0.0.0.0         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
  172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
  192.168.130.0   0.0.0.0         255.255.255.0   U     0      0        0 eth1
  </code></pre>
  
  <p>How can I change the default route to 192.169.130.3 such that it persists a restart?</p>
  
  <p>I can change it while container1 is running with</p>
  
  <pre><code> pid=$(sudo docker inspect -f '{{.State.Pid}}' container1)
   sudo mkdir -p /var/run/netns
   sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid
   sudo ip netns exec $pid ip route del default 
   sudo ip netns exec $pid ip route add default via 192.168.130.3
  </code></pre>
  
  <p>but that is gone after a restart. How can I change that?</p>
  
  <p><strong>Update:</strong> Apparently, <a href="https://github.com/docker/docker/issues/21741">the lexicographical order of the networks</a> could also be part of the issue. I will test it when I get a chance.</p>