forked from pool/docker
1d3bce0fc6
- Add backports of https://github.com/docker/docker/pull/37302 and https://github.com/docker/cli/pull/1130, which allow for users to explicitly specify the NIS domainname of a container. bsc#1001161 + bsc1001161-0001-oci-include-the-domainname-in-kernel.domainname.patch + bsc1001161-0002-cli-add-a-separate-domainname-flag.patch OBS-URL: https://build.opensuse.org/request/show/653738 OBS-URL: https://build.opensuse.org/package/show/Virtualization:containers/docker?expand=0&rev=273
228 lines
12 KiB
Diff
228 lines
12 KiB
Diff
From 975d8efceb479c3d0994814cc5d488ac33d0d2d6 Mon Sep 17 00:00:00 2001
|
|
From: Aleksa Sarai <asarai@suse.de>
|
|
Date: Mon, 18 Jun 2018 21:58:23 +1000
|
|
Subject: [PATCH 2/2] cli: add a separate --domainname flag
|
|
|
|
A while ago, Docker split the "Domainname" field out from the "Hostname"
|
|
field for the container configuration. There was no real user-visible
|
|
change associated with this (and under the hood "Domainname" was mostly
|
|
left unused from the command-line point of view). We now add this flag
|
|
in order to match other proposed changes to allow for setting the NIS
|
|
domainname of a container.
|
|
|
|
This also includes a fix for the --hostname parsing tests (they would
|
|
not error out if only one of .Hostname and .Domainname were incorrectly
|
|
set -- which is not correct).
|
|
|
|
SUSE-Bugs: bsc#1001161
|
|
Signed-off-by: Aleksa Sarai <asarai@suse.de>
|
|
---
|
|
components/cli/cli/command/container/opts.go | 3 ++
|
|
.../cli/cli/command/container/opts_test.go | 31 ++++++++++++++++---
|
|
components/cli/contrib/completion/bash/docker | 5 +--
|
|
components/cli/contrib/completion/zsh/_docker | 1 +
|
|
.../cli/docs/reference/commandline/create.md | 1 +
|
|
.../cli/docs/reference/commandline/run.md | 1 +
|
|
.../reference/commandline/service_create.md | 2 +-
|
|
components/cli/docs/reference/run.md | 6 ++--
|
|
components/cli/man/docker-run.1.md | 7 +++++
|
|
9 files changed, 46 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/components/cli/cli/command/container/opts.go b/components/cli/cli/command/container/opts.go
|
|
index 97906b672252..7cd9ce998c8b 100644
|
|
--- a/components/cli/cli/command/container/opts.go
|
|
+++ b/components/cli/cli/command/container/opts.go
|
|
@@ -74,6 +74,7 @@ type containerOptions struct {
|
|
containerIDFile string
|
|
entrypoint string
|
|
hostname string
|
|
+ domainname string
|
|
memory opts.MemBytes
|
|
memoryReservation opts.MemBytes
|
|
memorySwap opts.MemSwapBytes
|
|
@@ -169,6 +170,7 @@ func addFlags(flags *pflag.FlagSet) *containerOptions {
|
|
flags.StringVar(&copts.entrypoint, "entrypoint", "", "Overwrite the default ENTRYPOINT of the image")
|
|
flags.Var(&copts.groupAdd, "group-add", "Add additional groups to join")
|
|
flags.StringVarP(&copts.hostname, "hostname", "h", "", "Container host name")
|
|
+ flags.StringVar(&copts.domainname, "domainname", "", "Container NIS domain name")
|
|
flags.BoolVarP(&copts.stdin, "interactive", "i", false, "Keep STDIN open even if not attached")
|
|
flags.VarP(&copts.labels, "label", "l", "Set meta data on a container")
|
|
flags.Var(&copts.labelsFile, "label-file", "Read in a line delimited file of labels")
|
|
@@ -546,6 +548,7 @@ func parse(flags *pflag.FlagSet, copts *containerOptions) (*containerConfig, err
|
|
|
|
config := &container.Config{
|
|
Hostname: copts.hostname,
|
|
+ Domainname: copts.domainname,
|
|
ExposedPorts: ports,
|
|
User: copts.user,
|
|
Tty: copts.tty,
|
|
diff --git a/components/cli/cli/command/container/opts_test.go b/components/cli/cli/command/container/opts_test.go
|
|
index 6d7c95a5ddb8..70bedc661751 100644
|
|
--- a/components/cli/cli/command/container/opts_test.go
|
|
+++ b/components/cli/cli/command/container/opts_test.go
|
|
@@ -265,14 +265,35 @@ func TestParseHostname(t *testing.T) {
|
|
hostnameWithDomainTld := "--hostname=hostname.domainname.tld"
|
|
for hostname, expectedHostname := range validHostnames {
|
|
if config, _ := mustParse(t, fmt.Sprintf("--hostname=%s", hostname)); config.Hostname != expectedHostname {
|
|
- t.Fatalf("Expected the config to have 'hostname' as hostname, got '%v'", config.Hostname)
|
|
+ t.Fatalf("Expected the config to have 'hostname' as %q, got %q", expectedHostname, config.Hostname)
|
|
}
|
|
}
|
|
- if config, _ := mustParse(t, hostnameWithDomain); config.Hostname != "hostname.domainname" && config.Domainname != "" {
|
|
- t.Fatalf("Expected the config to have 'hostname' as hostname.domainname, got '%v'", config.Hostname)
|
|
+ if config, _ := mustParse(t, hostnameWithDomain); config.Hostname != "hostname.domainname" || config.Domainname != "" {
|
|
+ t.Fatalf("Expected the config to have 'hostname' as hostname.domainname, got %q", config.Hostname)
|
|
}
|
|
- if config, _ := mustParse(t, hostnameWithDomainTld); config.Hostname != "hostname.domainname.tld" && config.Domainname != "" {
|
|
- t.Fatalf("Expected the config to have 'hostname' as hostname.domainname.tld, got '%v'", config.Hostname)
|
|
+ if config, _ := mustParse(t, hostnameWithDomainTld); config.Hostname != "hostname.domainname.tld" || config.Domainname != "" {
|
|
+ t.Fatalf("Expected the config to have 'hostname' as hostname.domainname.tld, got %q", config.Hostname)
|
|
+ }
|
|
+}
|
|
+
|
|
+func TestParseHostnameDomainname(t *testing.T) {
|
|
+ validDomainnames := map[string]string{
|
|
+ "domainname": "domainname",
|
|
+ "domain-name": "domain-name",
|
|
+ "domainname123": "domainname123",
|
|
+ "123domainname": "123domainname",
|
|
+ "domainname-63-bytes-long-should-be-valid-and-without-any-errors": "domainname-63-bytes-long-should-be-valid-and-without-any-errors",
|
|
+ }
|
|
+ for domainname, expectedDomainname := range validDomainnames {
|
|
+ if config, _ := mustParse(t, "--domainname="+domainname); config.Domainname != expectedDomainname {
|
|
+ t.Fatalf("Expected the config to have 'domainname' as %q, got %q", expectedDomainname, config.Domainname)
|
|
+ }
|
|
+ }
|
|
+ if config, _ := mustParse(t, "--hostname=some.prefix --domainname=domainname"); config.Hostname != "some.prefix" || config.Domainname != "domainname" {
|
|
+ t.Fatalf("Expected the config to have 'hostname' as 'some.prefix' and 'domainname' as 'domainname', got %q and %q", config.Hostname, config.Domainname)
|
|
+ }
|
|
+ if config, _ := mustParse(t, "--hostname=another-prefix --domainname=domainname.tld"); config.Hostname != "another-prefix" || config.Domainname != "domainname.tld" {
|
|
+ t.Fatalf("Expected the config to have 'hostname' as 'another-prefix' and 'domainname' as 'domainname.tld', got %q and %q", config.Hostname, config.Domainname)
|
|
}
|
|
}
|
|
|
|
diff --git a/components/cli/contrib/completion/bash/docker b/components/cli/contrib/completion/bash/docker
|
|
index 44ac8f3e0ed9..c532f5142c3d 100644
|
|
--- a/components/cli/contrib/completion/bash/docker
|
|
+++ b/components/cli/contrib/completion/bash/docker
|
|
@@ -5,8 +5,8 @@
|
|
# - SC2016: Expressions don't expand in single quotes, use double quotes for that.
|
|
# - SC2119: Use foo "$@" if function's $1 should mean script's $1.
|
|
# - SC2155: Declare and assign separately to avoid masking return values.
|
|
-#
|
|
-# You can find more details for each warning at the following page:
|
|
+#
|
|
+# You can find more details for each warning at the following page:
|
|
# https://github.com/koalaman/shellcheck/wiki/<SCXXXX>
|
|
#
|
|
# bash completion file for core docker commands
|
|
@@ -1785,6 +1785,7 @@ _docker_container_run_and_create() {
|
|
--dns
|
|
--dns-option
|
|
--dns-search
|
|
+ --domainname
|
|
--entrypoint
|
|
--env -e
|
|
--env-file
|
|
diff --git a/components/cli/contrib/completion/zsh/_docker b/components/cli/contrib/completion/zsh/_docker
|
|
index 94f042204dfb..9a502db0886f 100644
|
|
--- a/components/cli/contrib/completion/zsh/_docker
|
|
+++ b/components/cli/contrib/completion/zsh/_docker
|
|
@@ -617,6 +617,7 @@ __docker_container_subcommand() {
|
|
"($help)*--dns=[Custom DNS servers]:DNS server: "
|
|
"($help)*--dns-option=[Custom DNS options]:DNS option: "
|
|
"($help)*--dns-search=[Custom DNS search domains]:DNS domains: "
|
|
+ "($help)*--domainname=[Container NIS domain name]:domainname:_hosts"
|
|
"($help)*"{-e=,--env=}"[Environment variables]:environment variable: "
|
|
"($help)--entrypoint=[Overwrite the default entrypoint of the image]:entry point: "
|
|
"($help)*--env-file=[Read environment variables from a file]:environment file:_files"
|
|
diff --git a/components/cli/docs/reference/commandline/create.md b/components/cli/docs/reference/commandline/create.md
|
|
index d585da40ae1e..c829dbb3e5b9 100644
|
|
--- a/components/cli/docs/reference/commandline/create.md
|
|
+++ b/components/cli/docs/reference/commandline/create.md
|
|
@@ -53,6 +53,7 @@ Options:
|
|
--dns value Set custom DNS servers (default [])
|
|
--dns-option value Set DNS options (default [])
|
|
--dns-search value Set custom DNS search domains (default [])
|
|
+ --domainname string Container NIS domain name
|
|
--entrypoint string Overwrite the default ENTRYPOINT of the image
|
|
-e, --env value Set environment variables (default [])
|
|
--env-file value Read in a file of environment variables (default [])
|
|
diff --git a/components/cli/docs/reference/commandline/run.md b/components/cli/docs/reference/commandline/run.md
|
|
index 08b9f18d68ac..f448e1acf89b 100644
|
|
--- a/components/cli/docs/reference/commandline/run.md
|
|
+++ b/components/cli/docs/reference/commandline/run.md
|
|
@@ -57,6 +57,7 @@ Options:
|
|
--dns value Set custom DNS servers (default [])
|
|
--dns-option value Set DNS options (default [])
|
|
--dns-search value Set custom DNS search domains (default [])
|
|
+ --domainname string Container NIS domain name
|
|
--entrypoint string Overwrite the default ENTRYPOINT of the image
|
|
-e, --env value Set environment variables (default [])
|
|
--env-file value Read in a file of environment variables (default [])
|
|
diff --git a/components/cli/docs/reference/commandline/service_create.md b/components/cli/docs/reference/commandline/service_create.md
|
|
index 8fdb5297a102..c55c77b52d77 100644
|
|
--- a/components/cli/docs/reference/commandline/service_create.md
|
|
+++ b/components/cli/docs/reference/commandline/service_create.md
|
|
@@ -755,7 +755,7 @@ The swarm extends my-network to each node running the service.
|
|
Containers on the same network can access each other using
|
|
[service discovery](https://docs.docker.com/engine/swarm/networking/#use-swarm-mode-service-discovery).
|
|
|
|
-Long form syntax of `--network` allows to specify list of aliases and driver options:
|
|
+Long form syntax of `--network` allows to specify list of aliases and driver options:
|
|
`--network name=my-network,alias=web1,driver-opt=field1=value1`
|
|
|
|
### Publish service ports externally to the swarm (-p, --publish)
|
|
diff --git a/components/cli/docs/reference/run.md b/components/cli/docs/reference/run.md
|
|
index a59a30525554..695974fe533c 100644
|
|
--- a/components/cli/docs/reference/run.md
|
|
+++ b/components/cli/docs/reference/run.md
|
|
@@ -256,7 +256,7 @@ The UTS namespace is for setting the hostname and the domain that is visible
|
|
to running processes in that namespace. By default, all containers, including
|
|
those with `--network=host`, have their own UTS namespace. The `host` setting will
|
|
result in the container using the same UTS namespace as the host. Note that
|
|
-`--hostname` is invalid in `host` UTS mode.
|
|
+`--hostname` and `--domainname` are invalid in `host` UTS mode.
|
|
|
|
You may wish to share the UTS namespace with the host if you would like the
|
|
hostname of the container to change as the hostname of the host changes. A
|
|
@@ -396,8 +396,8 @@ network stack and all interfaces from the host will be available to the
|
|
container. The container's hostname will match the hostname on the host
|
|
system. Note that `--mac-address` is invalid in `host` netmode. Even in `host`
|
|
network mode a container has its own UTS namespace by default. As such
|
|
-`--hostname` is allowed in `host` network mode and will only change the
|
|
-hostname inside the container.
|
|
+`--hostname` and `--domainname` are allowed in `host` network mode and will
|
|
+only change the hostname and domain name inside the container.
|
|
Similar to `--hostname`, the `--add-host`, `--dns`, `--dns-search`, and
|
|
`--dns-option` options can be used in `host` network mode. These options update
|
|
`/etc/hosts` or `/etc/resolv.conf` inside the container. No change are made to
|
|
diff --git a/components/cli/man/docker-run.1.md b/components/cli/man/docker-run.1.md
|
|
index e03377001d4e..4a1464a74200 100644
|
|
--- a/components/cli/man/docker-run.1.md
|
|
+++ b/components/cli/man/docker-run.1.md
|
|
@@ -35,6 +35,7 @@ docker-run - Run a command in a new container
|
|
[**--dns**[=*[]*]]
|
|
[**--dns-option**[=*[]*]]
|
|
[**--dns-search**[=*[]*]]
|
|
+[**--domainname**[=*DOMAINNAME*]]
|
|
[**-e**|**--env**[=*[]*]]
|
|
[**--entrypoint**[=*ENTRYPOINT*]]
|
|
[**--env-file**[=*[]*]]
|
|
@@ -285,6 +286,12 @@ configuration passed to the container. Typically this is necessary when the
|
|
host DNS configuration is invalid for the container (e.g., 127.0.0.1). When this
|
|
is the case the **--dns** flags is necessary for every run.
|
|
|
|
+**--domainname**=""
|
|
+ Container NIS domain name
|
|
+
|
|
+ Sets the container's NIS domain name (see also **setdomainname(2)**) that is
|
|
+ available inside the container.
|
|
+
|
|
**-e**, **--env**=[]
|
|
Set environment variables
|
|
|
|
--
|
|
2.19.2
|
|
|