-
Notifications
You must be signed in to change notification settings - Fork 46
/
docker.sh
120 lines (96 loc) · 3.35 KB
/
docker.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash
export DOCKER_BUILDKIT=1
require docker tr
require:linux ip grep awk
require:macos ipconfig
require:windows tail cut
import lib/version.sh
import lib/string.sh
# ------------------
function Environment::checkDockerVersion() {
Console::verbose::start "Checking docker version..."
local requiredMinimalVersion=${1:-'18.09.1'}
local installedVersion=$(String::trimWhitespaces "$(
command -v docker >/dev/null
# shellcheck disable=SC2015
test $? -eq 0 && docker version --format '{{.Server.Version}}'
)")
if [ -z "${installedVersion}" ]; then
Console::error "Docker is not running. Please, make sure Docker is installed and running."
exit 1
fi
if [ "$(Version::parse "${installedVersion}")" -lt "$(Version::parse "${requiredMinimalVersion}")" ]; then
Console::error "Docker version ${installedVersion} is not supported. Please, update docker to at least ${requiredMinimalVersion}."
exit 1
fi
Environment::checkDependenciesByVersion "${installedVersion}"
Console::end "[OK]"
}
function Environment::checkDependenciesByVersion() {
local installedVersion=${1}
local requiredMinimalVersionWithBuildx='23.0.0'
if [ "$(Version::parse "${installedVersion}")" -ge "$(Version::parse "${requiredMinimalVersionWithBuildx}")" ]; then
local isBuildxExist=$(docker --help | grep buildx)
if [ -z "${isBuildxExist}" ]; then
Console::error "Docker Buildx plugin is not installed. Please, make sure Docker Buildx plugin is installed. How to install Docker Buildx(https://docs.docker.com/build/install-buildx/)"
exit 1
fi
fi
}
# ------------------
function Environment::isDockerMachineActive() {
if [ -n "${DOCKER_MACHINE_NAME}" ]; then
return "${TRUE}"
fi
return "${FALSE}"
}
# ------------------
function Environment::getDockerIp() {
if [ -n "${DOCKER_MACHINE_NAME}" ]; then
echo -n "$(docker-machine ip "${DOCKER_MACHINE_NAME}" | tr -d " \n")"
return "${TRUE}"
fi
echo -n '127.0.0.1'
return "${TRUE}"
}
# ------------------
function Environment::isWSL() {
# See https://github.com/microsoft/WSL/issues/423#issuecomment-221627364
if grep -sqi microsoft /proc/sys/kernel/osrelease; then
return "${TRUE}"
fi
return "${FALSE}"
}
# ------------------
function Environment::getHostIp() {
local myIp='host.docker.internal'
case ${_PLATFORM} in
linux)
if ! Environment::isWSL; then
myIp=$(ip route get 1 | sed 's/^.*src \([^ ]*\).*$/\1/;q')
fi
;;
macos)
if Environment::isDockerMachineActive; then
myIp=$(ipconfig getifaddr en0)
fi
;;
windows)
if Environment::isDockerMachineActive; then
# TODO check windows host IP in WSL and WSL2
myIp=$(tail -1 /etc/resolv.conf | cut -d' ' -f2)
fi
;;
esac
echo "${myIp}"
return "${TRUE}"
}
# ------------------
function Environment::getFullUserId() {
local USER_UID=1000
local USER_GID=1000
[ "${_PLATFORM}" == "linux" ] && ! Environment::isDockerMachineActive && USER_UID=$(id -u) && USER_GID=$(id -g)
echo -n "${USER_UID}:${USER_GID}"
return "${TRUE}"
}
Registry::addChecker 'Environment::checkDockerVersion'