Browse Source

Merge pull request #27857 from vasil-yordanov/docker-service-hostname-2

Adding the hostname option to docker service command
Vincent Demeester 8 years ago
parent
commit
b4e14c6edc

+ 1 - 0
api/types/swarm/container.go

@@ -13,6 +13,7 @@ type ContainerSpec struct {
 	Labels          map[string]string       `json:",omitempty"`
 	Command         []string                `json:",omitempty"`
 	Args            []string                `json:",omitempty"`
+	Hostname        string                  `json:",omitempty"`
 	Env             []string                `json:",omitempty"`
 	Dir             string                  `json:",omitempty"`
 	User            string                  `json:",omitempty"`

+ 1 - 0
cli/command/service/create.go

@@ -33,6 +33,7 @@ func newCreateCommand(dockerCli *command.DockerCli) *cobra.Command {
 
 	flags.VarP(&opts.labels, flagLabel, "l", "Service labels")
 	flags.Var(&opts.containerLabels, flagContainerLabel, "Container labels")
+	flags.StringVar(&opts.hostname, flagHostname, "", "Container hostname")
 	flags.VarP(&opts.env, flagEnv, "e", "Set environment variables")
 	flags.Var(&opts.envFile, flagEnvFile, "Read in a file of environment variables")
 	flags.Var(&opts.mounts, flagMount, "Attach a filesystem mount to the service")

+ 3 - 0
cli/command/service/opts.go

@@ -316,6 +316,7 @@ type serviceOptions struct {
 	containerLabels opts.ListOpts
 	image           string
 	args            []string
+	hostname        string
 	env             opts.ListOpts
 	envFile         opts.ListOpts
 	workdir         string
@@ -387,6 +388,7 @@ func (opts *serviceOptions) ToService() (swarm.ServiceSpec, error) {
 				Image:           opts.image,
 				Args:            opts.args,
 				Env:             currentEnv,
+				Hostname:        opts.hostname,
 				Labels:          runconfigopts.ConvertKVStringsToMap(opts.containerLabels.GetAll()),
 				Dir:             opts.workdir,
 				User:            opts.user,
@@ -486,6 +488,7 @@ const (
 	flagContainerLabelRemove  = "container-label-rm"
 	flagContainerLabelAdd     = "container-label-add"
 	flagEndpointMode          = "endpoint-mode"
+	flagHostname              = "hostname"
 	flagEnv                   = "env"
 	flagEnvFile               = "env-file"
 	flagEnvRemove             = "env-rm"

+ 18 - 16
daemon/cluster/convert/container.go

@@ -13,14 +13,15 @@ import (
 
 func containerSpecFromGRPC(c *swarmapi.ContainerSpec) types.ContainerSpec {
 	containerSpec := types.ContainerSpec{
-		Image:   c.Image,
-		Labels:  c.Labels,
-		Command: c.Command,
-		Args:    c.Args,
-		Env:     c.Env,
-		Dir:     c.Dir,
-		User:    c.User,
-		Groups:  c.Groups,
+		Image:    c.Image,
+		Labels:   c.Labels,
+		Command:  c.Command,
+		Args:     c.Args,
+		Hostname: c.Hostname,
+		Env:      c.Env,
+		Dir:      c.Dir,
+		User:     c.User,
+		Groups:   c.Groups,
 	}
 
 	// Mounts
@@ -67,14 +68,15 @@ func containerSpecFromGRPC(c *swarmapi.ContainerSpec) types.ContainerSpec {
 
 func containerToGRPC(c types.ContainerSpec) (*swarmapi.ContainerSpec, error) {
 	containerSpec := &swarmapi.ContainerSpec{
-		Image:   c.Image,
-		Labels:  c.Labels,
-		Command: c.Command,
-		Args:    c.Args,
-		Env:     c.Env,
-		Dir:     c.Dir,
-		User:    c.User,
-		Groups:  c.Groups,
+		Image:    c.Image,
+		Labels:   c.Labels,
+		Command:  c.Command,
+		Args:     c.Args,
+		Hostname: c.Hostname,
+		Env:      c.Env,
+		Dir:      c.Dir,
+		User:     c.User,
+		Groups:   c.Groups,
 	}
 
 	if c.StopGracePeriod != nil {

+ 1 - 0
daemon/cluster/executor/container/container.go

@@ -128,6 +128,7 @@ func (c *containerConfig) config() *enginecontainer.Config {
 	config := &enginecontainer.Config{
 		Labels:      c.labels(),
 		User:        c.spec().User,
+		Hostname:    c.spec().Hostname,
 		Env:         c.spec().Env,
 		WorkingDir:  c.spec().Dir,
 		Image:       c.image(),

+ 7 - 0
docs/reference/commandline/service_create.md

@@ -32,6 +32,7 @@ Options:
       --health-retries int               Consecutive failures needed to report unhealthy
       --health-timeout duration          Maximum time to allow one check to run
       --help                             Print usage
+      --hostname                         Service containers hostname
   -l, --label value                      Service labels (default [])
       --limit-cpu value                  Limit CPUs (default 0.000)
       --limit-memory value               Limit Memory (default 0 B)
@@ -134,6 +135,12 @@ This sets environmental variables for all tasks in a service. For example:
 $ docker service create --name redis_2 --replicas 5 --env MYVAR=foo redis:3.0.6
 ```
 
+### Create a docker service with specific hostname (--hostname)
+
+This option sets the docker service containers hostname to a specific string. For example:
+```bash
+$ docker service create --name redis --hostname myredis redis:3.0.6
+```
 ### Set metadata on a service (-l, --label)
 
 A label is a `key=value` pair that applies metadata to a service. To label a