Set the IP address in dockerinit instead of lxc utils, to prepare for
using libvirt-lxc.
| ... | ... |
@@ -574,7 +574,11 @@ func (container *Container) Start() (err error) {
|
| 574 | 574 |
|
| 575 | 575 |
// Networking |
| 576 | 576 |
if !container.Config.NetworkDisabled {
|
| 577 |
- params = append(params, "-g", container.network.Gateway.String()) |
|
| 577 |
+ network := container.NetworkSettings |
|
| 578 |
+ params = append(params, |
|
| 579 |
+ "-g", network.Gateway, |
|
| 580 |
+ "-i", fmt.Sprintf("%s/%d", network.IPAddress, network.IPPrefixLen),
|
|
| 581 |
+ ) |
|
| 578 | 582 |
} |
| 579 | 583 |
|
| 580 | 584 |
// User |
| ... | ... |
@@ -12,11 +12,9 @@ lxc.network.type = empty |
| 12 | 12 |
{{else}}
|
| 13 | 13 |
# network configuration |
| 14 | 14 |
lxc.network.type = veth |
| 15 |
-lxc.network.flags = up |
|
| 16 | 15 |
lxc.network.link = {{.NetworkSettings.Bridge}}
|
| 17 | 16 |
lxc.network.name = eth0 |
| 18 | 17 |
lxc.network.mtu = 1500 |
| 19 |
-lxc.network.ipv4 = {{.NetworkSettings.IPAddress}}/{{.NetworkSettings.IPPrefixLen}}
|
|
| 20 | 18 |
{{end}}
|
| 21 | 19 |
|
| 22 | 20 |
# root filesystem |
| ... | ... |
@@ -20,6 +20,7 @@ import ( |
| 20 | 20 |
type DockerInitArgs struct {
|
| 21 | 21 |
user string |
| 22 | 22 |
gateway string |
| 23 |
+ ip string |
|
| 23 | 24 |
workDir string |
| 24 | 25 |
privileged bool |
| 25 | 26 |
env []string |
| ... | ... |
@@ -36,17 +37,41 @@ func setupHostname(args *DockerInitArgs) error {
|
| 36 | 36 |
|
| 37 | 37 |
// Setup networking |
| 38 | 38 |
func setupNetworking(args *DockerInitArgs) error {
|
| 39 |
- if args.gateway == "" {
|
|
| 40 |
- return nil |
|
| 41 |
- } |
|
| 39 |
+ if args.ip != "" {
|
|
| 40 |
+ // eth0 |
|
| 41 |
+ iface, err := net.InterfaceByName("eth0")
|
|
| 42 |
+ if err != nil {
|
|
| 43 |
+ return fmt.Errorf("Unable to set up networking: %v", err)
|
|
| 44 |
+ } |
|
| 45 |
+ ip, ipNet, err := net.ParseCIDR(args.ip) |
|
| 46 |
+ if err != nil {
|
|
| 47 |
+ return fmt.Errorf("Unable to set up networking: %v", err)
|
|
| 48 |
+ } |
|
| 49 |
+ if err := netlink.NetworkLinkAddIp(iface, ip, ipNet); err != nil {
|
|
| 50 |
+ return fmt.Errorf("Unable to set up networking: %v", err)
|
|
| 51 |
+ } |
|
| 52 |
+ if err := netlink.NetworkLinkUp(iface); err != nil {
|
|
| 53 |
+ return fmt.Errorf("Unable to set up networking: %v", err)
|
|
| 54 |
+ } |
|
| 42 | 55 |
|
| 43 |
- ip := net.ParseIP(args.gateway) |
|
| 44 |
- if ip == nil {
|
|
| 45 |
- return fmt.Errorf("Unable to set up networking, %s is not a valid IP", args.gateway)
|
|
| 56 |
+ // loopback |
|
| 57 |
+ iface, err = net.InterfaceByName("lo")
|
|
| 58 |
+ if err != nil {
|
|
| 59 |
+ return fmt.Errorf("Unable to set up networking: %v", err)
|
|
| 60 |
+ } |
|
| 61 |
+ if err := netlink.NetworkLinkUp(iface); err != nil {
|
|
| 62 |
+ return fmt.Errorf("Unable to set up networking: %v", err)
|
|
| 63 |
+ } |
|
| 46 | 64 |
} |
| 65 |
+ if args.gateway != "" {
|
|
| 66 |
+ gw := net.ParseIP(args.gateway) |
|
| 67 |
+ if gw == nil {
|
|
| 68 |
+ return fmt.Errorf("Unable to set up networking, %s is not a valid gateway IP", args.gateway)
|
|
| 69 |
+ } |
|
| 47 | 70 |
|
| 48 |
- if err := netlink.AddDefaultGw(ip); err != nil {
|
|
| 49 |
- return fmt.Errorf("Unable to set up networking: %v", err)
|
|
| 71 |
+ if err := netlink.AddDefaultGw(gw); err != nil {
|
|
| 72 |
+ return fmt.Errorf("Unable to set up networking: %v", err)
|
|
| 73 |
+ } |
|
| 50 | 74 |
} |
| 51 | 75 |
|
| 52 | 76 |
return nil |
| ... | ... |
@@ -199,6 +224,7 @@ func SysInit() {
|
| 199 | 199 |
// Get cmdline arguments |
| 200 | 200 |
user := flag.String("u", "", "username or uid")
|
| 201 | 201 |
gateway := flag.String("g", "", "gateway address")
|
| 202 |
+ ip := flag.String("i", "", "ip address")
|
|
| 202 | 203 |
workDir := flag.String("w", "", "workdir")
|
| 203 | 204 |
privileged := flag.Bool("privileged", false, "privileged mode")
|
| 204 | 205 |
flag.Parse() |
| ... | ... |
@@ -216,6 +242,7 @@ func SysInit() {
|
| 216 | 216 |
args := &DockerInitArgs{
|
| 217 | 217 |
user: *user, |
| 218 | 218 |
gateway: *gateway, |
| 219 |
+ ip: *ip, |
|
| 219 | 220 |
workDir: *workDir, |
| 220 | 221 |
privileged: *privileged, |
| 221 | 222 |
env: env, |