From 4b49c1fcc135b5b424cb572540b4eb0b1ed59efe Mon Sep 17 00:00:00 2001 From: Michal Budzyn Date: Mon, 29 Jan 2018 18:26:30 +0100 Subject: [PATCH] Add DNSServer to docker component --- README.md | 1 + docker_client.go | 8 +++++++- docker_client_test.go | 3 ++- docker_component.go | 2 ++ docker_lifecycle_handler.go | 4 ++-- test-examples/setup_docker_environment_test.go | 1 + 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8b38813..ae9b327 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,7 @@ func TestWithDocker(t *testing.T) { `http://{{ value . "it-vault.Host"}}:{{ value . "it-vault.Port"}}/v1/sys/seal-status`, http.Options{}, ), + DNSServer: "8.8.8.8", }, ) if err != nil { diff --git a/docker_client.go b/docker_client.go index b7aa060..e68c08c 100644 --- a/docker_client.go +++ b/docker_client.go @@ -108,7 +108,7 @@ func (r *dockerClient) PullImage(imageName string) error { } // CreateContainer creates a new container. -func (r *dockerClient) CreateContainer(containerName string, image string, env []string, portSpecs []string, cmd []string, binds []string) (string, error) { +func (r *dockerClient) CreateContainer(containerName string, image string, env []string, portSpecs []string, cmd []string, binds []string, dnsServer string) (string, error) { // ip:public:private/proto exposedPorts, portBindings, err := nat.ParsePortSpecs(portSpecs) if err != nil { @@ -120,9 +120,15 @@ func (r *dockerClient) CreateContainer(containerName string, image string, env [ ExposedPorts: exposedPorts, Cmd: typesStrslice.StrSlice(cmd), } + dns := make([]string, 0) + if dnsServer != "" { + dns = append(dns, dnsServer) + } + hostConfig := typesContainer.HostConfig{ PortBindings: portBindings, Binds: binds, + DNS: dns, } body, err := r.client.ContainerCreate(context.Background(), &config, &hostConfig, nil, containerName) diff --git a/docker_client_test.go b/docker_client_test.go index 2df7839..b25a1a6 100644 --- a/docker_client_test.go +++ b/docker_client_test.go @@ -50,7 +50,8 @@ func TestDockerCommands(t *testing.T) { env := []string{} cmd := []string{} binds := []string{} - containerID, err := dc.CreateContainer(containerName, testImage, env, portSpecs, cmd, binds) + dnsServer := "" + containerID, err := dc.CreateContainer(containerName, testImage, env, portSpecs, cmd, binds, dnsServer) a.Nil(err) container, err := dc.GetContainerByID(containerID) diff --git a/docker_component.go b/docker_component.go index 456d484..3890938 100644 --- a/docker_component.go +++ b/docker_component.go @@ -18,6 +18,8 @@ type DockerComponent struct { Cmd []string // List of volume bindings for this container Binds []string + // DNS server to lookup + DNSServer string // Follow container log output FollowLogs bool // Callback invoked after start container command was invoked. diff --git a/docker_lifecycle_handler.go b/docker_lifecycle_handler.go index d8e43c2..247d619 100644 --- a/docker_lifecycle_handler.go +++ b/docker_lifecycle_handler.go @@ -211,8 +211,8 @@ func (r *dockerLifecycleHandler) createDockerContainer(container *dockerContaine cmd = append(cmd, container.Cmd...) } - r.context.logger.Info.Println("Creating container for", container.Name, "name", containerName, "env", env, "portSpecs", portSpecs, "cmd", cmd, "binds", container.Binds) - containerID, err := r.dockerClient.CreateContainer(containerName, container.Image, env, portSpecs, cmd, container.Binds) + r.context.logger.Info.Println("Creating container for", container.Name, "name", containerName, "env", env, "portSpecs", portSpecs, "cmd", cmd, "binds", container.Binds, "dns", container.DNSServer) + containerID, err := r.dockerClient.CreateContainer(containerName, container.Image, env, portSpecs, cmd, container.Binds, container.DNSServer) if err != nil { return err } diff --git a/test-examples/setup_docker_environment_test.go b/test-examples/setup_docker_environment_test.go index e81a405..6e5a3e5 100644 --- a/test-examples/setup_docker_environment_test.go +++ b/test-examples/setup_docker_environment_test.go @@ -197,6 +197,7 @@ func newDockerEnvironment() *dit.DockerEnvironment { `http://{{ value . "it-vault.Host"}}:{{ value . "it-vault.Port"}}/v1/sys/seal-status`, http.Options{}, ), + DNSServer: "8.8.8.8", }, ) if err != nil {