Fallback to /proc/meminfo when memory.limit_in_bytes exists but no limit

is set
This commit is contained in:
Daniel Berteaud 2024-03-13 14:24:36 +01:00
parent 2dbcd67c01
commit f06ba30318
5 changed files with 42 additions and 38 deletions

View File

@ -34,25 +34,25 @@ job "base_images" {
task "java11" {
driver = "docker"
config {
image = "danielberteaud/java:11.24.3-3"
image = "danielberteaud/java:11.24.3-4"
}
}
task "java17" {
driver = "docker"
config {
image = "danielberteaud/java:17.24.3-3"
image = "danielberteaud/java:17.24.3-4"
}
}
task "java21" {
driver = "docker"
config {
image = "danielberteaud/java:21.24.3-3"
image = "danielberteaud/java:21.24.3-4"
}
}
task "java8" {
driver = "docker"
config {
image = "danielberteaud/java:8.24.3-3"
image = "danielberteaud/java:8.24.3-4"
}
}
task "mariadb" {

View File

@ -13,7 +13,9 @@ get_max_mem(){
else
echo $(($(cat /sys/fs/cgroup/memory.max)/1024/1024))
fi
elif [ -e /sys/fs/cgroup/memory/memory.limit_in_bytes ]; then
# memory.limit_in_bytes can contain the max memory allocated to the container
# but if the container has no limit, it'll contain 9223372036854771712 in which case we must fallback to /proc/meminfo
elif [ -e /sys/fs/cgroup/memory/memory.limit_in_bytes -a "$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)" != "9223372036854771712" ]; then
echo $(($(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)/1024/1024))
else
echo $(($(cat /proc/meminfo | grep MemTotal | sed -E 's/MemTotal:\s+([0-9]+)\s+kB/\1/')/1024))

View File

@ -61,73 +61,73 @@ function build_alpine {
}
function build_java11 {
if [ "${IMAGE_JAVA11_AVAILABLE:-0}" = "1" ]; then
echo "Image danielberteaud/java:11.24.3-3 already available"
echo "Image danielberteaud/java:11.24.3-4 already available"
return
fi
if ! docker manifest inspect danielberteaud/java:11.24.3-3 > /dev/null 2>&1; then
echo "Building java:11.24.3-3"
if ! docker manifest inspect danielberteaud/java:11.24.3-4 > /dev/null 2>&1; then
echo "Building java:11.24.3-4"
export BUILDKIT_PROGRESS=plain
docker build -t danielberteaud/java:11.24.3-3 -t danielberteaud/java11:latest -t danielberteaud/java:11 --build-arg=JAVA_VERSION=11 output/images/java &&\
docker push danielberteaud/java:11.24.3-3 &&\
docker build -t danielberteaud/java:11.24.3-4 -t danielberteaud/java11:latest -t danielberteaud/java:11 --build-arg=JAVA_VERSION=11 output/images/java &&\
docker push danielberteaud/java:11.24.3-4 &&\
docker push danielberteaud/java11:latest &&\
docker push danielberteaud/java:11 &&\
echo "danielberteaud/java:11.24.3-3 pushed to remote repo"
echo "danielberteaud/java:11.24.3-4 pushed to remote repo"
else
echo "Image danielberteaud/java:11.24.3-3 already available"
echo "Image danielberteaud/java:11.24.3-4 already available"
fi
IMAGE_JAVA11_AVAILABLE=1
}
function build_java17 {
if [ "${IMAGE_JAVA17_AVAILABLE:-0}" = "1" ]; then
echo "Image danielberteaud/java:17.24.3-3 already available"
echo "Image danielberteaud/java:17.24.3-4 already available"
return
fi
if ! docker manifest inspect danielberteaud/java:17.24.3-3 > /dev/null 2>&1; then
echo "Building java:17.24.3-3"
if ! docker manifest inspect danielberteaud/java:17.24.3-4 > /dev/null 2>&1; then
echo "Building java:17.24.3-4"
export BUILDKIT_PROGRESS=plain
docker build -t danielberteaud/java:17.24.3-3 -t danielberteaud/java17:latest -t danielberteaud/java:17 --build-arg=JAVA_VERSION=17 output/images/java &&\
docker push danielberteaud/java:17.24.3-3 &&\
docker build -t danielberteaud/java:17.24.3-4 -t danielberteaud/java17:latest -t danielberteaud/java:17 --build-arg=JAVA_VERSION=17 output/images/java &&\
docker push danielberteaud/java:17.24.3-4 &&\
docker push danielberteaud/java17:latest &&\
docker push danielberteaud/java:17 &&\
echo "danielberteaud/java:17.24.3-3 pushed to remote repo"
echo "danielberteaud/java:17.24.3-4 pushed to remote repo"
else
echo "Image danielberteaud/java:17.24.3-3 already available"
echo "Image danielberteaud/java:17.24.3-4 already available"
fi
IMAGE_JAVA17_AVAILABLE=1
}
function build_java21 {
if [ "${IMAGE_JAVA21_AVAILABLE:-0}" = "1" ]; then
echo "Image danielberteaud/java:21.24.3-3 already available"
echo "Image danielberteaud/java:21.24.3-4 already available"
return
fi
if ! docker manifest inspect danielberteaud/java:21.24.3-3 > /dev/null 2>&1; then
echo "Building java:21.24.3-3"
if ! docker manifest inspect danielberteaud/java:21.24.3-4 > /dev/null 2>&1; then
echo "Building java:21.24.3-4"
export BUILDKIT_PROGRESS=plain
docker build -t danielberteaud/java:21.24.3-3 -t danielberteaud/java21:latest -t danielberteaud/java:21 --build-arg=JAVA_VERSION=21 output/images/java &&\
docker push danielberteaud/java:21.24.3-3 &&\
docker build -t danielberteaud/java:21.24.3-4 -t danielberteaud/java21:latest -t danielberteaud/java:21 --build-arg=JAVA_VERSION=21 output/images/java &&\
docker push danielberteaud/java:21.24.3-4 &&\
docker push danielberteaud/java21:latest &&\
docker push danielberteaud/java:21 &&\
echo "danielberteaud/java:21.24.3-3 pushed to remote repo"
echo "danielberteaud/java:21.24.3-4 pushed to remote repo"
else
echo "Image danielberteaud/java:21.24.3-3 already available"
echo "Image danielberteaud/java:21.24.3-4 already available"
fi
IMAGE_JAVA21_AVAILABLE=1
}
function build_java8 {
if [ "${IMAGE_JAVA8_AVAILABLE:-0}" = "1" ]; then
echo "Image danielberteaud/java:8.24.3-3 already available"
echo "Image danielberteaud/java:8.24.3-4 already available"
return
fi
if ! docker manifest inspect danielberteaud/java:8.24.3-3 > /dev/null 2>&1; then
echo "Building java:8.24.3-3"
if ! docker manifest inspect danielberteaud/java:8.24.3-4 > /dev/null 2>&1; then
echo "Building java:8.24.3-4"
export BUILDKIT_PROGRESS=plain
docker build -t danielberteaud/java:8.24.3-3 -t danielberteaud/java8:latest -t danielberteaud/java:8 --build-arg=JAVA_VERSION=8 output/images/java &&\
docker push danielberteaud/java:8.24.3-3 &&\
docker build -t danielberteaud/java:8.24.3-4 -t danielberteaud/java8:latest -t danielberteaud/java:8 --build-arg=JAVA_VERSION=8 output/images/java &&\
docker push danielberteaud/java:8.24.3-4 &&\
docker push danielberteaud/java8:latest &&\
docker push danielberteaud/java:8 &&\
echo "danielberteaud/java:8.24.3-3 pushed to remote repo"
echo "danielberteaud/java:8.24.3-4 pushed to remote repo"
else
echo "Image danielberteaud/java:8.24.3-3 already available"
echo "Image danielberteaud/java:8.24.3-4 already available"
fi
IMAGE_JAVA8_AVAILABLE=1
}

View File

@ -13,7 +13,9 @@ get_max_mem(){
else
echo $(($(cat /sys/fs/cgroup/memory.max)/1024/1024))
fi
elif [ -e /sys/fs/cgroup/memory/memory.limit_in_bytes ]; then
# memory.limit_in_bytes can contain the max memory allocated to the container
# but if the container has no limit, it'll contain 9223372036854771712 in which case we must fallback to /proc/meminfo
elif [ -e /sys/fs/cgroup/memory/memory.limit_in_bytes -a "$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)" != "9223372036854771712" ]; then
echo $(($(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)/1024/1024))
else
echo $(($(cat /proc/meminfo | grep MemTotal | sed -E 's/MemTotal:\s+([0-9]+)\s+kB/\1/')/1024))

View File

@ -237,7 +237,7 @@ docker:
# Alpine with Java8 (temurin)
java8:
image: java:8.24.3-3
image: java:8.24.3-4
build_args:
JAVA_VERSION: 8
tags:
@ -246,7 +246,7 @@ docker:
# Alpine with Java11 (temurin)
java11:
image: java:11.24.3-3
image: java:11.24.3-4
build_args:
JAVA_VERSION: 11
tags:
@ -255,7 +255,7 @@ docker:
# Alpine with Java17 (temurin)
java17:
image: java:17.24.3-3
image: java:17.24.3-4
build_args:
JAVA_VERSION: 17
tags:
@ -264,7 +264,7 @@ docker:
# Alpine with Java21 (temurin)
java21:
image: java:21.24.3-3
image: java:21.24.3-4
build_args:
JAVA_VERSION: 21
tags: