mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-16 22:53:22 +00:00
Merge pull request #4117 from wojtek-t/validate_docker_version
Check Docker version in Kubelet /healthz handler
This commit is contained in:
@@ -25,6 +25,7 @@ import (
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -104,7 +105,7 @@ type dockerContainerCommandRunner struct {
|
||||
var dockerAPIVersionWithExec = []uint{1, 15}
|
||||
|
||||
// Returns the major and minor version numbers of docker server.
|
||||
func (d *dockerContainerCommandRunner) getDockerServerVersion() ([]uint, error) {
|
||||
func (d *dockerContainerCommandRunner) GetDockerServerVersion() ([]uint, error) {
|
||||
env, err := d.client.Version()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get docker server version - %v", err)
|
||||
@@ -127,7 +128,7 @@ func (d *dockerContainerCommandRunner) getDockerServerVersion() ([]uint, error)
|
||||
}
|
||||
|
||||
func (d *dockerContainerCommandRunner) nativeExecSupportExists() (bool, error) {
|
||||
version, err := d.getDockerServerVersion()
|
||||
version, err := d.GetDockerServerVersion()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
@@ -641,6 +642,35 @@ func parseImageName(image string) (string, string) {
|
||||
return image, tag
|
||||
}
|
||||
|
||||
// Get a docker endpoint, either from the string passed in, or $DOCKER_HOST environment variables
|
||||
func getDockerEndpoint(dockerEndpoint string) string {
|
||||
var endpoint string
|
||||
if len(dockerEndpoint) > 0 {
|
||||
endpoint = dockerEndpoint
|
||||
} else if len(os.Getenv("DOCKER_HOST")) > 0 {
|
||||
endpoint = os.Getenv("DOCKER_HOST")
|
||||
} else {
|
||||
endpoint = "unix:///var/run/docker.sock"
|
||||
}
|
||||
glog.Infof("Connecting to docker on %s", endpoint)
|
||||
|
||||
return endpoint
|
||||
}
|
||||
|
||||
func ConnectToDockerOrDie(dockerEndpoint string) DockerInterface {
|
||||
if dockerEndpoint == "fake://" {
|
||||
return &FakeDockerClient{
|
||||
VersionInfo: []string{"apiVersion=1.16"},
|
||||
}
|
||||
}
|
||||
client, err := docker.NewClient(getDockerEndpoint(dockerEndpoint))
|
||||
if err != nil {
|
||||
glog.Fatal("Couldn't connect to docker.")
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
type ContainerCommandRunner interface {
|
||||
RunInContainer(containerID string, cmd []string) ([]byte, error)
|
||||
GetDockerServerVersion() ([]uint, error)
|
||||
}
|
||||
|
@@ -123,7 +123,7 @@ func TestContainerManifestNaming(t *testing.T) {
|
||||
func TestGetDockerServerVersion(t *testing.T) {
|
||||
fakeDocker := &FakeDockerClient{VersionInfo: docker.Env{"Client version=1.2", "Server version=1.1.3", "Server API version=1.15"}}
|
||||
runner := dockerContainerCommandRunner{fakeDocker}
|
||||
version, err := runner.getDockerServerVersion()
|
||||
version, err := runner.GetDockerServerVersion()
|
||||
if err != nil {
|
||||
t.Errorf("got error while getting docker server version - %s", err)
|
||||
}
|
||||
|
Reference in New Issue
Block a user