diff --git a/container.go b/container.go
index e0b09935b5..25bc4b948e 100644
--- a/container.go
+++ b/container.go
@@ -33,13 +33,14 @@ type Container struct {
 	network         *NetworkInterface
 	NetworkSettings *NetworkSettings
 
-	SysInitPath string
-	cmd         *exec.Cmd
-	stdout      *writeBroadcaster
-	stderr      *writeBroadcaster
-	stdin       io.ReadCloser
-	stdinPipe   io.WriteCloser
+	SysInitPath    string
+	ResolvConfPath string
 
+	cmd       *exec.Cmd
+	stdout    *writeBroadcaster
+	stderr    *writeBroadcaster
+	stdin     io.ReadCloser
+	stdinPipe io.WriteCloser
 	ptyMaster io.Closer
 
 	runtime *Runtime
@@ -61,6 +62,7 @@ type Config struct {
 	StdinOnce    bool // If true, close stdin after the 1 attached client disconnects.
 	Env          []string
 	Cmd          []string
+	Dns          []string
 	Image        string // Name of the image as it was passed by the operator (eg. could be symbolic)
 }
 
@@ -85,6 +87,9 @@ func ParseRun(args []string, stdout io.Writer) (*Config, error) {
 	var flEnv ListOpts
 	cmd.Var(&flEnv, "e", "Set environment variables")
 
+	var flDns ListOpts
+	cmd.Var(&flDns, "dns", "Set custom dns servers")
+
 	if err := cmd.Parse(args); err != nil {
 		return nil, err
 	}
@@ -122,6 +127,7 @@ func ParseRun(args []string, stdout io.Writer) (*Config, error) {
 		AttachStderr: flAttach.Get("stderr"),
 		Env:          flEnv,
 		Cmd:          runCmd,
+		Dns:          flDns,
 		Image:        image,
 	}
 	// When allocating stdin in attached mode, close stdin at client disconnect
diff --git a/lxc_template.go b/lxc_template.go
index c6849cb0df..5ac62f52af 100644
--- a/lxc_template.go
+++ b/lxc_template.go
@@ -78,7 +78,7 @@ lxc.mount.entry = devpts {{$ROOTFS}}/dev/pts devpts newinstance,ptmxmode=0666,no
 lxc.mount.entry = {{.SysInitPath}} {{$ROOTFS}}/sbin/init none bind,ro 0 0
 
 # In order to get a working DNS environment, mount bind (ro) the host's /etc/resolv.conf into the container
-lxc.mount.entry = /etc/resolv.conf {{$ROOTFS}}/etc/resolv.conf none bind,ro 0 0
+lxc.mount.entry = {{.ResolvConfPath}} {{$ROOTFS}}/etc/resolv.conf none bind,ro 0 0
 
 
 # drop linux capabilities (apply mainly to the user root in the container)
diff --git a/runtime.go b/runtime.go
index ec02939702..3fe07c7ea6 100644
--- a/runtime.go
+++ b/runtime.go
@@ -82,6 +82,7 @@ func (runtime *Runtime) Create(config *Config) (*Container, error) {
 	if config.Hostname == "" {
 		config.Hostname = id[:12]
 	}
+
 	container := &Container{
 		// FIXME: we should generate the ID here instead of receiving it as an argument
 		Id:              id,
@@ -100,6 +101,24 @@ func (runtime *Runtime) Create(config *Config) (*Container, error) {
 	if err := os.Mkdir(container.root, 0700); err != nil {
 		return nil, err
 	}
+
+	// If custom dns exists, then create a resolv.conf for the container
+	if len(config.Dns) > 0 {
+		container.ResolvConfPath = path.Join(container.root, "resolv.conf")
+		f, err := os.Create(container.ResolvConfPath)
+		if err != nil {
+			return nil, err
+		}
+		defer f.Close()
+		for _, dns := range config.Dns {
+			if _, err := f.Write([]byte("nameserver " + dns + "\n")); err != nil {
+				return nil, err
+			}
+		}
+	} else {
+		container.ResolvConfPath = "/etc/resolv.conf"
+	}
+
 	// Step 2: save the container json
 	if err := container.ToDisk(); err != nil {
 		return nil, err