|
1 | 1 | #!/bin/bash
|
2 | 2 |
|
3 |
| -set -euxo pipefail |
| 3 | +set -euo pipefail |
4 | 4 |
|
5 |
| -image_id="$(docker build --quiet .)" |
| 5 | +if [[ "${DEBUG:-false}" == true ]]; then |
| 6 | + set -x |
| 7 | + export DOND_SHIM_DEBUG=true |
| 8 | +fi |
6 | 9 |
|
7 |
| -# shellcheck disable=SC2312 |
8 |
| -docker_args=(docker run --rm --user "$(id -u):$(id -g)" --volume /var/run/docker.sock:/var/run/docker.sock) |
| 10 | +# Set docker versions from args or use defaults |
| 11 | +if [[ $# -eq 0 ]]; then |
| 12 | + docker_versions=("18.09" "19.03" "20.10" "23" "24" latest) |
| 13 | +else |
| 14 | + docker_versions=("$@") |
| 15 | +fi |
9 | 16 |
|
10 |
| -# Check if docker on docker is working |
11 |
| -"${docker_args[@]}" "${image_id}" docker version >/dev/null |
| 17 | +for docker_version in "${docker_versions[@]}"; do |
| 18 | + echo "Testing with docker version: ${docker_version}" |
12 | 19 |
|
13 |
| -# Check if mounting an volume from the container gets fixed |
14 |
| -"${docker_args[@]}" "${image_id}" docker run --rm --volume /home/rootless/only-inside-container:/only-inside-container ubuntu:latest grep "^test$" /only-inside-container >/dev/null |
15 |
| -"${docker_args[@]}" "${image_id}" docker run --rm --volume=/home/rootless/only-inside-container:/only-inside-container ubuntu:latest grep "^test$" /only-inside-container >/dev/null |
| 20 | + image_id="$(docker build --target test --build-arg "DOCKER_VERSION=${docker_version}" --quiet .)" |
16 | 21 |
|
17 |
| -# Check if mounting a volume which is already a volume gets fixed |
18 |
| -"${docker_args[@]}" --volume "${PWD}:/wd" "${image_id}" docker run --rm --volume /wd:/wd ubuntu:latest grep "^test$" /wd/testfile >/dev/null |
| 22 | + # shellcheck disable=SC2312 |
| 23 | + docker_args=(docker run --rm --env DOND_SHIM_DEBUG --entrypoint= --volume /var/run/docker.sock:/var/run/docker.sock) |
19 | 24 |
|
20 |
| -# Same as above but for a file within the volume |
21 |
| -"${docker_args[@]}" --volume "${PWD}:/wd" "${image_id}" docker run --rm --volume /wd/testfile:/wd/testfile ubuntu:latest grep "^test$" /wd/testfile >/dev/null |
| 25 | + echo "Do not change global options or after the image" |
| 26 | + "${docker_args[@]}" --env DOND_SHIM_PRINT_COMMAND=true --volume "${PWD}:/wd" "${image_id}" \ |
| 27 | + docker --host test run --volume /wd:/wd alpine --volume /wd:/wd | |
| 28 | + grep --quiet "^docker.orig --host test run --volume ${PWD}:/wd alpine --volume /wd:/wd$" |
22 | 29 |
|
23 |
| -# Volumes inside volumes |
24 |
| -"${docker_args[@]}" --volume "${PWD}/testfile:/home/rootless/testfile" "${image_id}" docker run --rm --volume /home/rootless:/wd ubuntu:latest grep "^test$" /wd/testfile >/dev/null |
25 |
| -"${docker_args[@]}" --volume "${PWD}/testfile:/home/rootless/testfile" --volume "${PWD}/testfile:/home/rootless/testfile2" "${image_id}" docker run --rm --volume /home/rootless:/wd ubuntu:latest bash -c 'grep "^test$" /wd/testfile && grep "^test$" /wd/testfile2 && grep "^test$" /wd/only-inside-container' >/dev/null |
| 30 | + echo "Same but for container run" |
| 31 | + "${docker_args[@]}" --env DOND_SHIM_PRINT_COMMAND=true --volume "${PWD}:/wd" "${image_id}" \ |
| 32 | + docker --host test container run --volume /wd:/wd alpine --volume /wd:/wd | |
| 33 | + grep --quiet "^docker.orig --host test container run --volume ${PWD}:/wd alpine --volume /wd:/wd$" |
| 34 | + |
| 35 | + echo "Same but for create" |
| 36 | + "${docker_args[@]}" --env DOND_SHIM_PRINT_COMMAND=true --volume "${PWD}:/wd" "${image_id}" \ |
| 37 | + docker --host test create --volume /wd:/wd alpine --volume /wd:/wd | |
| 38 | + grep --quiet "^docker.orig --host test create --volume ${PWD}:/wd alpine --volume /wd:/wd$" |
| 39 | + |
| 40 | + echo "Same but container create" |
| 41 | + "${docker_args[@]}" --env DOND_SHIM_PRINT_COMMAND=true --volume "${PWD}:/wd" "${image_id}" \ |
| 42 | + docker --host test container create --volume /wd:/wd alpine --volume /wd:/wd | |
| 43 | + grep --quiet "^docker.orig --host test container create --volume ${PWD}:/wd alpine --volume /wd:/wd$" |
| 44 | + |
| 45 | + echo "Do not do anything for other commands" |
| 46 | + "${docker_args[@]}" --env DOND_SHIM_PRINT_COMMAND=true --volume "${PWD}:/wd" "${image_id}" \ |
| 47 | + docker --host test whatever --volume /wd:/wd alpine --volume /wd:/wd | |
| 48 | + grep --quiet "^docker.orig --host test whatever --volume /wd:/wd alpine --volume /wd:/wd$" |
| 49 | + |
| 50 | + echo "Check if docker on docker is working" |
| 51 | + "${docker_args[@]}" "${image_id}" \ |
| 52 | + docker version >/dev/null |
| 53 | + |
| 54 | + echo "Check if mounting an volume from the container gets fixed" |
| 55 | + "${docker_args[@]}" "${image_id}" \ |
| 56 | + docker run --rm --volume /test/only-inside-container:/only-inside-container ubuntu:latest grep "^test$" /only-inside-container >/dev/null |
| 57 | + |
| 58 | + echo "Same but with equals sign" |
| 59 | + "${docker_args[@]}" "${image_id}" \ |
| 60 | + docker run --rm --volume=/test/only-inside-container:/only-inside-container ubuntu:latest grep "^test$" /only-inside-container >/dev/null |
| 61 | + |
| 62 | + echo "Check if mounting a volume which is already a volume gets fixed" |
| 63 | + "${docker_args[@]}" --volume "${PWD}:/wd" "${image_id}" \ |
| 64 | + docker run --rm --volume /wd:/wd ubuntu:latest grep "^test$" /wd/testfile >/dev/null |
| 65 | + |
| 66 | + echo "Same as above but for a file within the volume" |
| 67 | + "${docker_args[@]}" --volume "${PWD}:/wd" "${image_id}" \ |
| 68 | + docker run --rm --volume /wd/testfile:/wd/testfile ubuntu:latest grep "^test$" /wd/testfile >/dev/null |
| 69 | + |
| 70 | + echo "Check if mounting a volume which contains another volume adds all proper volumes" |
| 71 | + "${docker_args[@]}" --volume "${PWD}/testfile:/test/testfile" "${image_id}" \ |
| 72 | + docker run --rm --volume /test:/wd ubuntu:latest grep "^test$" /wd/testfile >/dev/null |
| 73 | + |
| 74 | + echo "Same as above but for multiple files under different volumes" |
| 75 | + "${docker_args[@]}" --volume "${PWD}/testfile:/test/testfile" --volume "${PWD}/testfile:/test/testfile2" "${image_id}" \ |
| 76 | + docker run --rm --volume /test:/wd ubuntu:latest bash -c 'grep "^test$" /wd/testfile && grep "^test$" /wd/testfile2 && grep "^test$" /wd/only-inside-container' >/dev/null |
| 77 | + |
| 78 | +done |
0 commit comments