├── .bin ├── bashbrew-buildkit-env-setup.sh └── docker-buildx-ensure.sh ├── .buildkit-build-contexts.sh ├── .dockerignore ├── .external-pins ├── docker │ └── scout-sbom-indexer___1 ├── file.sh ├── list.sh ├── mcr.microsoft.com │ └── windows │ │ ├── nanoserver___1809 │ │ ├── nanoserver___ltsc2022 │ │ ├── nanoserver___ltsc2025 │ │ ├── servercore___1809 │ │ ├── servercore___ltsc2022 │ │ └── servercore___ltsc2025 ├── redhat │ ├── ubi8-minimal___latest │ ├── ubi8___latest │ ├── ubi9-minimal___latest │ └── ubi9___latest ├── tag.sh ├── tianon │ └── buildkit___0.16 └── update.sh ├── .gitattributes ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE.md └── workflows │ ├── .bashbrew │ └── action.yml │ ├── generate.sh │ ├── munge-pr.yml │ ├── naughty.sh │ └── test-pr.yml ├── .gitignore ├── CODE-OF-CONDUCT.md ├── Dockerfile ├── LICENSE ├── MAINTAINERS ├── NEW-IMAGE-CHECKLIST.md ├── README.md ├── SECURITY.md ├── _bashbrew-cat-sorted.sh ├── diff-pr.sh ├── library ├── adminer ├── aerospike ├── almalinux ├── alpine ├── alt ├── amazoncorretto ├── amazonlinux ├── api-firewall ├── arangodb ├── archlinux ├── backdrop ├── bash ├── bonita ├── buildpack-deps ├── busybox ├── caddy ├── cassandra ├── chronograf ├── cirros ├── clearlinux ├── clefos ├── clickhouse ├── clojure ├── composer ├── convertigo ├── couchbase ├── couchdb ├── crate ├── dart ├── debian ├── docker ├── drupal ├── eclipse-mosquitto ├── eclipse-temurin ├── eggdrop ├── elasticsearch ├── elixir ├── emqx ├── erlang ├── fedora ├── flink ├── fluentd ├── friendica ├── gazebo ├── gcc ├── geonetwork ├── ghost ├── golang ├── gradle ├── groovy ├── haproxy ├── haskell ├── haxe ├── hello-world ├── hitch ├── httpd ├── hylang ├── ibm-semeru-runtimes ├── ibmjava ├── influxdb ├── irssi ├── jetty ├── joomla ├── jruby ├── julia ├── kapacitor ├── kibana ├── kong ├── krakend ├── lightstreamer ├── liquibase ├── logstash ├── mageia ├── mariadb ├── matomo ├── maven ├── mediawiki ├── memcached ├── mongo ├── mongo-express ├── monica ├── mono ├── mysql ├── nats ├── neo4j ├── neurodebian ├── nextcloud ├── nginx ├── node ├── notary ├── odoo ├── open-liberty ├── openjdk ├── oraclelinux ├── orientdb ├── percona ├── perl ├── photon ├── php ├── php-zendserver ├── phpmyadmin ├── plone ├── postfixadmin ├── postgres ├── pypy ├── python ├── r-base ├── rabbitmq ├── rakudo-star ├── redis ├── redmine ├── registry ├── rethinkdb ├── rocket.chat ├── rockylinux ├── ros ├── ruby ├── rust ├── sapmachine ├── satosa ├── silverpeas ├── solr ├── sonarqube ├── spark ├── spiped ├── storm ├── swift ├── swipl ├── teamspeak ├── telegraf ├── tomcat ├── tomee ├── traefik ├── ubuntu ├── unit ├── varnish ├── websphere-liberty ├── wordpress ├── xwiki ├── yourls ├── znc └── zookeeper ├── naughty-commits.sh ├── naughty-constraints.sh ├── naughty-from.sh ├── naughty-sharedtags.sh ├── pr-urls.sh ├── test ├── README.md ├── clean.sh ├── config.sh ├── retry.sh ├── run.sh └── tests │ ├── cassandra-basics │ └── run.sh │ ├── cheeky-retries.sh │ ├── composer │ ├── composer.json │ ├── container.sh │ └── run.sh │ ├── convertigo-hello-world │ └── run.sh │ ├── dart-hello-world │ ├── container.dart │ ├── expected-std-out.txt │ └── run.sh │ ├── debian-apt-get │ ├── container.sh │ ├── expected-std-out.txt │ └── run.sh │ ├── docker-build.sh │ ├── docker-dind │ └── run.sh │ ├── docker-registry-push-pull │ └── run.sh │ ├── eclipse-mosquitto-basics │ ├── mosquitto.conf │ └── run.sh │ ├── elixir-hello-world │ ├── container.exs │ ├── expected-std-out.txt │ └── run.sh │ ├── erlang-hello-world │ ├── container.erl │ ├── expected-std-out.txt │ └── run.sh │ ├── gcc-c-hello-world │ ├── container.c │ ├── expected-std-out.txt │ └── run.sh │ ├── gcc-cpp-hello-world │ ├── container.cpp │ ├── expected-std-out.txt │ └── run.sh │ ├── ghost-basics │ └── run.sh │ ├── golang-hello-world │ ├── container.go │ ├── expected-std-out.txt │ ├── real-run.sh │ └── run.sh │ ├── haproxy-basics │ ├── haproxy.cfg │ └── run.sh │ ├── haskell-cabal │ ├── container.sh │ └── run.sh │ ├── haskell-ghci │ ├── container.sh │ └── run.sh │ ├── haskell-runhaskell │ ├── container.hs │ ├── expected-std-out.txt │ └── run.sh │ ├── haskell-stack │ ├── container.sh │ └── run.sh │ ├── haxe-haxelib-install │ ├── Container.hx │ └── run.sh │ ├── haxe-hello-world │ ├── Container.hx │ ├── expected-std-out.txt │ └── run.sh │ ├── hylang-hello-world │ ├── container.hy │ ├── expected-std-out.txt │ └── run.sh │ ├── hylang-sh │ ├── container.hy │ ├── expected-std-out.txt │ └── run.sh │ ├── image-name.sh │ ├── java-ca-certificates │ ├── container.java │ └── run.sh │ ├── java-hello-world │ ├── container.java │ ├── expected-std-out.txt │ └── run.sh │ ├── java-uimanager-font │ ├── container.java │ └── run.sh │ ├── jetty-hello-web │ ├── index.jsp │ └── run.sh │ ├── julia-downloads │ ├── container.jl │ └── run.sh │ ├── julia-hello-world │ ├── container.jl │ ├── expected-std-out.txt │ └── run.sh │ ├── logstash-basics │ └── run.sh │ ├── matomo-apache-run │ └── run.sh │ ├── matomo-fpm-run │ └── run.sh │ ├── memcached-basics │ └── run.sh │ ├── mongo-auth-basics │ └── run.sh │ ├── mongo-basics │ └── run.sh │ ├── mongo-express-run │ └── run.sh │ ├── mongo-tls-auth │ └── run.sh │ ├── mongo-tls-basics │ └── run.sh │ ├── monica-apache-run │ └── run.sh │ ├── monica-cli-mariadb10 │ └── run.sh │ ├── monica-cli-mysql8 │ └── run.sh │ ├── monica-cli │ └── run.sh │ ├── monica-fpm-run │ └── run.sh │ ├── mysql-basics │ └── run.sh │ ├── mysql-initdb │ ├── initdb.sql │ └── run.sh │ ├── mysql-log-bin │ └── run.sh │ ├── nextcloud-apache-run │ ├── real-run.sh │ └── run.sh │ ├── nextcloud-cli-mysql │ └── run.sh │ ├── nextcloud-cli-postgres │ └── run.sh │ ├── nextcloud-cli-sqlite │ └── run.sh │ ├── nextcloud-cli │ └── run.sh │ ├── nextcloud-fpm-run │ ├── real-run.sh │ └── run.sh │ ├── no-hard-coded-passwords │ └── run.sh │ ├── node-hello-world │ ├── container.js │ ├── expected-std-out.txt │ └── run.sh │ ├── nuxeo-basics │ └── run.sh │ ├── nuxeo-conf │ ├── expected-std-out.txt │ └── run.sh │ ├── open-liberty-hello-world │ └── run.sh │ ├── override-cmd │ └── run.sh │ ├── percona-rocksdb │ └── run.sh │ ├── percona-tokudb │ └── run.sh │ ├── perl-cpanm │ ├── container.sh │ └── run.sh │ ├── perl-hello-world │ ├── container.pl │ ├── expected-std-out.txt │ └── run.sh │ ├── php-apache-hello-web │ ├── index.php │ └── run.sh │ ├── php-argon2 │ ├── container.php │ └── run.sh │ ├── php-ext-install │ ├── container.sh │ └── run.sh │ ├── php-fpm-hello-web │ ├── index.php │ └── run.sh │ ├── php-hello-world │ ├── container.php │ ├── expected-std-out.txt │ └── run.sh │ ├── plone-addons │ ├── expected-std-out.txt │ └── run.sh │ ├── plone-basics │ └── run.sh │ ├── plone-cors │ ├── expected-std-out.txt │ └── run.sh │ ├── plone-versions │ ├── expected-std-out.txt │ └── run.sh │ ├── plone-zeoclient │ └── run.sh │ ├── plone-zeosite │ ├── expected-std-out.txt │ └── run.sh │ ├── postfixadmin-apache-run │ └── run.sh │ ├── postfixadmin-fpm-run │ └── run.sh │ ├── postgres-basics │ └── run.sh │ ├── postgres-initdb │ ├── initdb.sql │ └── run.sh │ ├── python-imports │ ├── container.py │ └── run.sh │ ├── python-no-pyc │ ├── container.cmd │ ├── container.sh │ └── run.sh │ ├── python-pip-requests-ssl │ ├── container.py │ └── run.sh │ ├── python-sqlite3 │ ├── container.py │ └── run.sh │ ├── python-stack-size │ ├── container.py │ └── run.sh │ ├── rabbitmq-basics │ ├── receive.py │ ├── run.sh │ ├── send.py │ └── testconn.py │ ├── rabbitmq-tls │ ├── inet-dist-tls.config │ ├── rabbitmq-env.conf │ ├── rabbitmq.conf │ └── run.sh │ ├── redis-basics-config │ ├── real-run.sh │ └── run.sh │ ├── redis-basics-persistent │ └── run.sh │ ├── redis-basics-tls │ └── run.sh │ ├── redis-basics │ └── run.sh │ ├── redmine-basics │ └── run.sh │ ├── ruby-binstubs │ ├── Gemfile │ ├── container.sh │ └── run.sh │ ├── ruby-bundler │ ├── Gemfile │ ├── container.sh │ └── run.sh │ ├── ruby-gems │ ├── container.sh │ └── run.sh │ ├── ruby-hello-world │ ├── container.rb │ ├── expected-std-out.txt │ └── run.sh │ ├── ruby-native-extension │ ├── expected-std-out.txt │ └── run.sh │ ├── ruby-nonroot │ ├── Gemfile │ ├── container.sh │ ├── real-run.sh │ └── run.sh │ ├── ruby-standard-libs │ ├── container.rb │ ├── expected-std-out.txt │ └── run.sh │ ├── run-bash-in-container.sh │ ├── run-dart-in-container.sh │ ├── run-elixir-in-container.sh │ ├── run-erlang-in-container.sh │ ├── run-g++-in-container.sh │ ├── run-gcc-in-container.sh │ ├── run-go-in-container.sh │ ├── run-haskell-in-container.sh │ ├── run-haxe-in-container.sh │ ├── run-hy-in-container.sh │ ├── run-in-container.sh │ ├── run-java-in-container.sh │ ├── run-julia-in-container.sh │ ├── run-node-in-container.sh │ ├── run-perl-in-container.sh │ ├── run-php-in-container.sh │ ├── run-python-in-container.sh │ ├── run-ruby-in-container.sh │ ├── run-rust-in-container.sh │ ├── run-sh-in-container.sh │ ├── run-swift-in-container.sh │ ├── run-swipl-in-container.sh │ ├── rust-hello-world │ ├── container │ │ ├── Cargo.toml │ │ └── src │ │ │ └── main.rs │ ├── expected-std-out.txt │ └── run.sh │ ├── silverpeas-basics │ └── run.sh │ ├── spiped-basics │ └── run.sh │ ├── swift-hello-world │ ├── container.swift │ ├── expected-std-out.txt │ └── run.sh │ ├── swipl-modules │ ├── container.pl │ ├── expected-std-out.txt │ └── run.sh │ ├── tomcat-hello-world │ ├── index.jsp │ └── run.sh │ ├── utc │ ├── expected-std-out.txt │ └── run.sh │ ├── varnish │ └── run.sh │ ├── wordpress-apache-run │ └── run.sh │ ├── wordpress-fpm-run │ └── run.sh │ ├── znc-basics │ └── run.sh │ └── zookeeper-basics │ └── run.sh └── toc.sh /.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore -------------------------------------------------------------------------------- /.external-pins/docker/scout-sbom-indexer___1: -------------------------------------------------------------------------------- 1 | sha256:b327f522f4c0be32cb0b947d55184ff125c462ab66168556ca1273b038a001d1 2 | -------------------------------------------------------------------------------- /.external-pins/file.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | # given an image (name:tag), return the appropriate filename 5 | 6 | dir="$(dirname "$BASH_SOURCE")" 7 | 8 | for img; do 9 | if [[ "$img" != *:* ]]; then 10 | echo >&2 "error: '$img' does not contain ':' -- this violates our assumptions! (did you mean '$img:latest' ?)" 11 | exit 1 12 | fi 13 | 14 | imgFile="$dir/${img/:/___}" # see ".external-pins/list.sh" 15 | echo "$imgFile" 16 | done 17 | -------------------------------------------------------------------------------- /.external-pins/list.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | dir="$(dirname "$BASH_SOURCE")" 5 | 6 | find "$dir" -mindepth 2 -type f -printf '%P\n' | sed -e 's/___/:/' | sort 7 | 8 | # assumptions which make the "___" -> ":" conversion ~safe (examples referencing "example.com/foo/bar:baz"): 9 | # 10 | # 1. we *always* specify a tag ("baz") 11 | # 2. the domain ("example.com") cannot contain underscores 12 | # 3. we do not pin to any registry with a non-443 port ("example.com:8443") 13 | # 4. the repository ("foo/bar") can only contain singular or double underscores (never triple underscore), and only between alphanumerics (thus never right up next to ":") 14 | # 5. we do *not* use the "g" regex modifier in our sed, which means only the first instance of triple underscore is replaced (in pure Bash, that's "${img/:/___}" or "${img/___/:}" depending on the conversion direction) 15 | # 16 | # see https://github.com/distribution/distribution/blob/411d6bcfd2580d7ebe6e346359fa16aceec109d5/reference/regexp.go 17 | # (see also https://github.com/docker-library/perl-bashbrew/blob/6685582f7889ef4806f0544b93f10640c7608b1a/lib/Bashbrew/RemoteImageRef.pm#L9-L26 for a condensed version) 18 | # 19 | # see https://github.com/docker-library/official-images/issues/13608 for why we can't just use ":" as-is (even though Linux, macOS, and even Windows via MSYS / WSL2 don't have any issues with it) 20 | -------------------------------------------------------------------------------- /.external-pins/mcr.microsoft.com/windows/nanoserver___1809: -------------------------------------------------------------------------------- 1 | sha256:976bddfc8aa59d7b861b94467a8fb620e727874bb9f736aace6ab8b3b46aa5c8 2 | -------------------------------------------------------------------------------- /.external-pins/mcr.microsoft.com/windows/nanoserver___ltsc2022: -------------------------------------------------------------------------------- 1 | sha256:73c8ef1336c6d577fa7beb0dcdbb8b690ee84e2eb5251f98b5234c8c1cc1df60 2 | -------------------------------------------------------------------------------- /.external-pins/mcr.microsoft.com/windows/nanoserver___ltsc2025: -------------------------------------------------------------------------------- 1 | sha256:058da689b887f0db5899ab95a47277b78293269b6f4585aa0c64b2b4328156a9 2 | -------------------------------------------------------------------------------- /.external-pins/mcr.microsoft.com/windows/servercore___1809: -------------------------------------------------------------------------------- 1 | sha256:606784af7e04d4d13d23e0bdfb484badaa34b233020074e9ddbe1fbf6f41d611 2 | -------------------------------------------------------------------------------- /.external-pins/mcr.microsoft.com/windows/servercore___ltsc2022: -------------------------------------------------------------------------------- 1 | sha256:a9e475f9925792421937e65bd191d79f97578e3013865b0b71f4fadee0d16d09 2 | -------------------------------------------------------------------------------- /.external-pins/mcr.microsoft.com/windows/servercore___ltsc2025: -------------------------------------------------------------------------------- 1 | sha256:c6b2b26058a096cb3f627ed03d0be66bea262c89222c988b516e63ae68f3ea72 2 | -------------------------------------------------------------------------------- /.external-pins/redhat/ubi8-minimal___latest: -------------------------------------------------------------------------------- 1 | sha256:b2a1bec3dfbc7a14a1d84d98934dfe8fdde6eb822a211286601cf109cbccb075 2 | -------------------------------------------------------------------------------- /.external-pins/redhat/ubi8___latest: -------------------------------------------------------------------------------- 1 | sha256:244e9858f9d8a2792a3dceb850b4fa8fdbd67babebfde42587bfa919d5d1ecef 2 | -------------------------------------------------------------------------------- /.external-pins/redhat/ubi9-minimal___latest: -------------------------------------------------------------------------------- 1 | sha256:92b1d5747a93608b6adb64dfd54515c3c5a360802db4706765ff3d8470df6290 2 | -------------------------------------------------------------------------------- /.external-pins/redhat/ubi9___latest: -------------------------------------------------------------------------------- 1 | sha256:304b50df1ea4db9706d8a30f4bbf26f582936ebc80c7e075c72ff2af99292a54 2 | -------------------------------------------------------------------------------- /.external-pins/tag.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | # given a filename, return the appropriate image (name:tag) 5 | 6 | origDir="$(dirname "$BASH_SOURCE")" 7 | dir="$(readlink -ve "$origDir")" 8 | 9 | for file; do 10 | abs="$(readlink -vm "$file")" 11 | rel="${abs#$dir/}" 12 | rel="${rel##*.external-pins/}" # in case we weren't inside "$dir" but the path is legit 13 | if [ "$rel" = "$abs" ]; then 14 | echo >&2 "error: '$file' is not within '$origDir'" 15 | echo >&2 "('$abs' vs '$dir')" 16 | exit 1 17 | fi 18 | 19 | img="${rel/___/:}" # see ".external-pins/list.sh" 20 | if [ "$img" = "$rel" ]; then 21 | echo >&2 "error: '$file' does not contain ':' ('___') -- this violates our assumptions!" 22 | exit 1 23 | fi 24 | 25 | echo "$img" 26 | done 27 | -------------------------------------------------------------------------------- /.external-pins/tianon/buildkit___0.16: -------------------------------------------------------------------------------- 1 | sha256:06b74cd0bab9ee34f5566e49729ce8aaf1ff047e7e4ab51c6947494642ce9209 2 | -------------------------------------------------------------------------------- /.external-pins/update.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | dir="$(dirname "$BASH_SOURCE")" 5 | 6 | if [ "$#" -eq 0 ]; then 7 | images="$("$dir/list.sh")" 8 | set -- $images 9 | fi 10 | 11 | for img; do 12 | echo -n "$img -> " 13 | 14 | if [[ "$img" != *:* ]]; then 15 | echo >&2 "error: '$img' does not contain ':' -- this violates our assumptions! (did you mean '$img:latest' ?)" 16 | exit 1 17 | fi 18 | 19 | digest="$(bashbrew remote arches --json "$img" | jq -r '.desc.digest')" 20 | 21 | imgFile="$("$dir/file.sh" "$img")" 22 | imgDir="$(dirname "$imgFile")" 23 | mkdir -p "$imgDir" 24 | echo "$digest" | tee "$imgFile" 25 | done 26 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # https://github.com/actions/checkout/issues/135#issuecomment-613361104 2 | * text eol=lf 3 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @docker-library/maintainers 2 | 3 | # give Laurent a bit more responsibility / authority on images where he's comfortable and knowledgeable 🎉 4 | /library/bash @LaurentGoderre @docker-library/maintainers 5 | /library/docker @LaurentGoderre @docker-library/maintainers 6 | /library/express-gateway @LaurentGoderre @docker-library/maintainers 7 | /library/ghost @LaurentGoderre @docker-library/maintainers 8 | /library/httpd @LaurentGoderre @docker-library/maintainers 9 | /library/kong @LaurentGoderre @docker-library/maintainers 10 | /library/mongo @LaurentGoderre @docker-library/maintainers 11 | /library/mongo-express @LaurentGoderre @docker-library/maintainers 12 | /library/nginx @LaurentGoderre @docker-library/maintainers 13 | /library/node @LaurentGoderre @docker-library/maintainers 14 | /library/oraclelinux @LaurentGoderre @docker-library/maintainers 15 | /library/postgres @LaurentGoderre @docker-library/maintainers 16 | /library/python @LaurentGoderre @docker-library/maintainers 17 | /library/rabbitmq @LaurentGoderre @docker-library/maintainers 18 | /library/redis @LaurentGoderre @docker-library/maintainers 19 | /library/redmine @LaurentGoderre @docker-library/maintainers 20 | /library/registry @LaurentGoderre @docker-library/maintainers 21 | /library/ruby @LaurentGoderre @docker-library/maintainers 22 | /library/traefik @LaurentGoderre @docker-library/maintainers 23 | /library/ubuntu @LaurentGoderre @docker-library/maintainers 24 | 25 | # make sure we check with Laurent before we update our SBOM indexer (he follows and is involved in those releases more closely than the rest of us) 👀 26 | /.external-pins/docker/scout-sbom-indexer* @LaurentGoderre 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /.github/workflows/.bashbrew/action.yml: -------------------------------------------------------------------------------- 1 | # https://github.com/docker-library/official-images/pull/13556#issuecomment-1319181339 🙈 2 | name: 'Shared Bashbrew Action' 3 | description: 'Install the same version of Bashbrew consistently in all other GitHub Actions' 4 | inputs: 5 | build: 6 | default: 'host' # or 'docker' or 'none' 7 | runs: 8 | using: 'composite' 9 | steps: 10 | 11 | # these two version numbers are intentionally as close together as I could possibly get them because no matter what I tried, GitHub will not allow me to DRY them (can't have any useful variables in `uses:` and can't even have YAML references to steal it in `env:` or something) 12 | - shell: 'bash -Eeuo pipefail -x {0}' 13 | run: echo BASHBREW_VERSION=v0.1.13 >> "$GITHUB_ENV" 14 | - uses: docker-library/bashbrew@v0.1.13 15 | if: inputs.build == 'host' 16 | 17 | - run: docker build --pull --tag oisupport/bashbrew:base "https://github.com/docker-library/bashbrew.git#$BASHBREW_VERSION" 18 | shell: 'bash -Eeuo pipefail -x {0}' 19 | if: inputs.build == 'docker' 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .git 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # FYI, this base image is built via ".github/workflows/.bashbrew/action.yml" (from https://github.com/docker-library/bashbrew/tree/master/Dockerfile) 2 | FROM oisupport/bashbrew:base 3 | 4 | RUN set -eux; \ 5 | apt-get update; \ 6 | apt-get install -y --no-install-recommends \ 7 | # wget for downloading files (especially in tests, which run in this environment) 8 | ca-certificates \ 9 | wget \ 10 | # git for cloning source code 11 | git \ 12 | # gawk for diff-pr.sh 13 | gawk \ 14 | # tar -tf in diff-pr.sh 15 | bzip2 \ 16 | # jq for diff-pr.sh 17 | jq \ 18 | ; \ 19 | rm -rf /var/lib/apt/lists/* 20 | 21 | ENV DIR /usr/src/official-images 22 | ENV BASHBREW_LIBRARY $DIR/library 23 | 24 | # crane for diff-pr.sh 25 | # https://gcr.io/go-containerregistry/crane:latest 26 | # https://explore.ggcr.dev/?image=gcr.io/go-containerregistry/crane:latest 27 | COPY --from=gcr.io/go-containerregistry/crane@sha256:fc86bcad43a000c2a1ca926a1e167db26c053cebc3fa5d14285c72773fb8c11d /ko-app/crane /usr/local/bin/ 28 | 29 | WORKDIR $DIR 30 | COPY . $DIR 31 | -------------------------------------------------------------------------------- /MAINTAINERS: -------------------------------------------------------------------------------- 1 | # This file lists the maintainers of the Official Images program at large, not necessarily the maintainers of any given image. 2 | 3 | Tianon Gravi (@tianon) 4 | Joseph Ferguson (@yosifkit) 5 | 6 | # Emeritus: Talon Bowler (@daghack) 7 | # Emeritus: Peter Salvatore (@psftw) 8 | 9 | # To find the maintainers for a given image, see "library/IMAGENAME" in this repository, or see the "Maintained by:" section of the "Quick Reference" of the image description on Docker Hub (or in the "docs" repo at https://github.com/docker-library/docs). 10 | -------------------------------------------------------------------------------- /NEW-IMAGE-CHECKLIST.md: -------------------------------------------------------------------------------- 1 | # Checklist for Review 2 | 3 | **NOTE:** This checklist is intended for the use of the Official Images maintainers both to track the status of your PR and to help inform you and others of where we're at. As such, please leave the "checking" of items to the repository maintainers. If there is a point below for which you would like to provide additional information or note completion, please do so by commenting on the PR. Thanks! (and thanks for staying patient with us :heart:) 4 | 5 | - [ ] associated with or contacted upstream? 6 | - [ ] available under [an OSI-approved license](https://opensource.org/licenses)? 7 | - [ ] does it fit into one of the common categories? ("service", "language stack", "base distribution") 8 | - [ ] is it reasonably popular, or does it solve a particular use case well? 9 | - [ ] does a [documentation](https://github.com/docker-library/docs/blob/master/README.md) PR exist? (should be reviewed and merged at roughly the same time so that we don't have an empty image page on the Hub for very long) 10 | - [ ] official-images maintainer dockerization review for best practices and cache gotchas/improvements (ala [the official review guidelines](https://github.com/docker-library/official-images/blob/master/README.md#review-guidelines))? 11 | - [ ] 2+ official-images maintainer dockerization review? 12 | - [ ] existing official images have been considered as a base? (ie, if `foobar` needs Node.js, has `FROM node:...` instead of grabbing `node` via other means been considered?) 13 | - [ ] if `FROM scratch`, tarballs only exist in a single commit within the associated history? 14 | - [ ] passes current tests? any simple new tests that might be appropriate to add? (https://github.com/docker-library/official-images/tree/master/test) 15 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | If you have run a CVE/security scanner on an image and that is why you are here, you should read [our "Why does my security scanner show that an image has CVEs?" FAQ entry](https://github.com/docker-library/faq#why-does-my-security-scanner-show-that-an-image-has-cves). 4 | 5 | If you believe you have found a net new security vulnerability, please make every effort to report it to the appropriate maintainers responsibly so that it can be fixed discreetly (also known as "embargo"). 6 | 7 | When the issue relates to a specific image, please make an effort to (privately) contact the maintainers of that specific image. Some maintainers publish/maintain a `SECRUITY.md` in their GitHub repository, for example, which can be a great place to find information about how to report an issue appropriately. 8 | 9 | For issues related to anything maintained under [@docker-library on GitHub](https://github.com/docker-library) or associated infrastructure, please [send an email to `doi@docker.com`](mailto:doi@docker.com) or [use GitHub's security advisory feature](https://github.com/docker-library/official-images/security/advisories/new). 10 | 11 | Image maintainers should also be aware of the ["Security Releases" section of the maintainer documentation](https://github.com/docker-library/official-images#security-releases) for pre-notifying the project maintainers of upcoming security-related releases. 12 | -------------------------------------------------------------------------------- /_bashbrew-cat-sorted.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | # a mimic of "bashbrew cat" which should sort slightly more deterministically (so even full-order-changing PRs should have reasonable diffs) 5 | 6 | images="$( 7 | bashbrew list --repos --uniq "$@" \ 8 | | sort -uV 9 | )" 10 | set -- $images 11 | 12 | declare -A seenGlobal=() 13 | 14 | first=1 15 | for img; do 16 | if [ -n "$first" ]; then 17 | first= 18 | else 19 | echo; echo 20 | fi 21 | 22 | if [ "$#" -gt 1 ]; then 23 | echo "# $img" 24 | fi 25 | 26 | repo="${img%:*}" 27 | if [ -z "${seenGlobal["$repo"]:-}" ]; then 28 | bashbrew cat --format '{{ printf "%s\n" (.Manifest.Global.ClearDefaults defaults) }}' "$img" 29 | seenGlobal["$repo"]="$img" 30 | else 31 | echo "# (see also ${seenGlobal["$repo"]} above)" 32 | fi 33 | 34 | bashbrew list --uniq "$img" \ 35 | | sort -V \ 36 | | xargs -r bashbrew cat --format ' 37 | {{- range $e := .TagEntries -}} 38 | {{- printf "\n%s\n" ($e.ClearDefaults $.Manifest.Global) -}} 39 | {{- end -}} 40 | ' 41 | done 42 | -------------------------------------------------------------------------------- /library/adminer: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/TimWolla/docker-adminer/blob/d05fa68d13a889364cf8c81884ecf1a11a37957f/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tim Düsterhus (@TimWolla) 4 | GitRepo: https://github.com/TimWolla/docker-adminer.git 5 | 6 | Tags: 5.2.1, 5, latest, 5.2.1-standalone, 5-standalone, standalone 7 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 8 | GitCommit: 98b870868bdd5adb179e79aa9b11cc01086ec1db 9 | Directory: 5 10 | 11 | Tags: 5.2.1-fastcgi, 5-fastcgi, fastcgi 12 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 13 | GitCommit: 98b870868bdd5adb179e79aa9b11cc01086ec1db 14 | Directory: 5/fastcgi 15 | 16 | Tags: 4.17.1, 4, 4.17.1-standalone, 4-standalone 17 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 18 | GitCommit: 0c0fd187e8646ad61fe592a80d66abec2c1dc951 19 | Directory: 4 20 | 21 | Tags: 4.17.1-fastcgi, 4-fastcgi 22 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 23 | GitCommit: 0c0fd187e8646ad61fe592a80d66abec2c1dc951 24 | Directory: 4/fastcgi 25 | -------------------------------------------------------------------------------- /library/aerospike: -------------------------------------------------------------------------------- 1 | Maintainers: Lucien Volmar (@volmarl), 2 | Michael Coberly (@mcoberly2), 3 | Phuc Vinh (@pvinh-spike), 4 | Kevin Porter (@kportertx), 5 | Thomas Huelbert (@thomasaerospike) 6 | 7 | Tags: ee-8.0.0.7, ee-8.0.0.7_1 8 | Architectures: amd64, arm64v8 9 | GitRepo: https://github.com/aerospike/aerospike-server.docker.git 10 | GitCommit: f7a9bd678ddd35ed68b819e22ece992a45289e96 11 | Directory: enterprise/ubuntu24.04 12 | 13 | Tags: ce-8.0.0.7, ce-8.0.0.7_1 14 | Architectures: amd64, arm64v8 15 | GitRepo: https://github.com/aerospike/aerospike-server.docker.git 16 | GitCommit: f7a9bd678ddd35ed68b819e22ece992a45289e96 17 | Directory: community/ubuntu24.04 18 | -------------------------------------------------------------------------------- /library/alt: -------------------------------------------------------------------------------- 1 | Maintainers: ALT Linux Team Cloud (@alt-cloud), 2 | Alexey Shabalin (@shaba), 3 | Gleb Fotengauer-Malinovskiy (@glebfm), 4 | Nadezhda Fedorova (@FNDenisovna) 5 | GitRepo: https://github.com/alt-cloud/docker-brew-alt.git 6 | 7 | Tags: p10, latest 8 | Architectures: amd64, i386, arm64v8 9 | GitFetch: refs/heads/p10 10 | GitCommit: 141eb568487cf0a98374d173e8641a00e234459a 11 | amd64-Directory: x86_64/ 12 | i386-Directory: i586/ 13 | arm64v8-Directory: aarch64/ 14 | 15 | Tags: sisyphus 16 | Architectures: amd64, i386, arm64v8, riscv64 17 | GitFetch: refs/heads/sisyphus 18 | GitCommit: 37a06effa12c3a7fae2ed60d6ae73da507ea1817 19 | amd64-Directory: x86_64/ 20 | arm64v8-Directory: aarch64/ 21 | i386-Directory: i586/ 22 | riscv64-Directory: riscv64/ 23 | 24 | Tags: p11 25 | Architectures: amd64, i386, arm64v8 26 | GitFetch: refs/heads/p11 27 | GitCommit: 73a73fc0c51684d2c1eee3b6640a6577a4bea19e 28 | amd64-Directory: x86_64/ 29 | arm64v8-Directory: aarch64/ 30 | i386-Directory: i586/ 31 | -------------------------------------------------------------------------------- /library/amazonlinux: -------------------------------------------------------------------------------- 1 | Maintainers: Amazon Linux (@amazonlinux), 2 | Frédérick Lefebvre (@fred-lefebvre), 3 | Stewart Smith (@stewartsmith), 4 | Christopher Miller (@mysteriouspants), 5 | Sumit Tomer (@sktomer), 6 | Tanu Rampal (@trampal), 7 | Sam Thornton (@mrthornazon), 8 | Preston Carpenter (@timidger), 9 | Miriam Clark (@mgclark001), 10 | Ade Adetayo (@dadetayo), 11 | Jason Jiannuo Pei (@peijiannuo) 12 | GitRepo: https://github.com/amazonlinux/container-images.git 13 | GitCommit: cc7a1876866f4056fa73a789a5b758358151c189 14 | 15 | Tags: 2023, latest, 2023.7.20250428.1 16 | Architectures: amd64, arm64v8 17 | amd64-GitFetch: refs/heads/al2023 18 | amd64-GitCommit: 8913d60448e6afb76886c1d50ae38d4fc6642512 19 | arm64v8-GitFetch: refs/heads/al2023-arm64 20 | arm64v8-GitCommit: f4e3821ed8835b7815c8acfcd935e98450daffe2 21 | 22 | Tags: 2, 2.0.20250428.0 23 | Architectures: amd64, arm64v8 24 | amd64-GitFetch: refs/heads/amzn2 25 | amd64-GitCommit: cc127d58207194b46ffb9fa9a478501faee11a81 26 | arm64v8-GitFetch: refs/heads/amzn2-arm64 27 | arm64v8-GitCommit: 64377d80f10bc86b9bd835a491d85da84f44d7a4 28 | 29 | Tags: 1, 2018.03, 2018.03.0.20231218.0 30 | Architectures: amd64 31 | amd64-GitFetch: refs/heads/2018.03 32 | amd64-GitCommit: cfb41ad1c7624786ea10f60c15ce9c117c4da3b6 33 | -------------------------------------------------------------------------------- /library/api-firewall: -------------------------------------------------------------------------------- 1 | Maintainers: Ivan Novikov (@d0znpp), 2 | Nikolay Tkachenko (@afr1ka) 3 | GitRepo: https://github.com/wallarm/api-firewall-docker.git 4 | 5 | Tags: 0.9.1, latest 6 | Architectures: amd64, arm64v8, i386 7 | GitCommit: c2776cc6a5adedddcdeb49e8613f64704ccb4c27 8 | GitFetch: refs/heads/main 9 | Directory: 0.9.1 10 | -------------------------------------------------------------------------------- /library/arangodb: -------------------------------------------------------------------------------- 1 | Maintainers: Frank Celler (@fceller), Wilfried Goesgens (@dothebart), Vadim Kondratyev (@KVS85) 2 | GitRepo: https://github.com/arangodb/arangodb-docker 3 | GitFetch: refs/heads/official 4 | 5 | Tags: 3.11, 3.11.13 6 | Architectures: amd64, arm64v8 7 | GitCommit: 52a0ac78f9cbae17665743bfc1e5b7c75329d268 8 | Directory: alpine/3.11.13 9 | 10 | Tags: 3.12, 3.12.4.3, latest 11 | Architectures: amd64, arm64v8 12 | GitCommit: 351d27922fd2060deb86a76a26a99ff1bb2f3c12 13 | Directory: alpine/3.12.4.3 14 | -------------------------------------------------------------------------------- /library/archlinux: -------------------------------------------------------------------------------- 1 | # https://gitlab.archlinux.org/archlinux/archlinux-docker 2 | 3 | Maintainers: Santiago Torres-Arias (@SantiagoTorres), 4 | Christian Rebischke (@shibumi), 5 | Justin Kromlinger (@hashworks) 6 | GitRepo: https://gitlab.archlinux.org/archlinux/archlinux-docker.git 7 | 8 | Tags: latest, base, base-20250511.0.348143 9 | GitCommit: ebb381b644ed8f3d3e1f4319975e18a65f638d66 10 | GitFetch: refs/tags/v20250511.0.348143 11 | File: Dockerfile.base 12 | 13 | Tags: base-devel, base-devel-20250511.0.348143 14 | GitCommit: ebb381b644ed8f3d3e1f4319975e18a65f638d66 15 | GitFetch: refs/tags/v20250511.0.348143 16 | File: Dockerfile.base-devel 17 | 18 | Tags: multilib-devel, multilib-devel-20250511.0.348143 19 | GitCommit: ebb381b644ed8f3d3e1f4319975e18a65f638d66 20 | GitFetch: refs/tags/v20250511.0.348143 21 | File: Dockerfile.multilib-devel 22 | 23 | -------------------------------------------------------------------------------- /library/backdrop: -------------------------------------------------------------------------------- 1 | Maintainers: Mike Pirog (@pirog), 2 | Geoff St. Pierre (@serundeputy), 3 | Jen Lampton (@jenlampton), 4 | Greg Netsas (@klonos) 5 | GitRepo: https://github.com/backdrop-ops/backdrop-docker.git 6 | 7 | Tags: 1.30.2, 1.30, 1, 1.30.2-apache, 1.30-apache, 1-apache, apache, latest 8 | Architectures: amd64, arm64v8 9 | GitCommit: 8af6f112829878eaef3c55f239aa9e6b35cbf2a7 10 | Directory: 1/apache 11 | 12 | Tags: 1.30.2-fpm, 1.30-fpm, 1-fpm, fpm 13 | Architectures: amd64, arm64v8 14 | GitCommit: 8af6f112829878eaef3c55f239aa9e6b35cbf2a7 15 | Directory: 1/fpm 16 | -------------------------------------------------------------------------------- /library/bonita: -------------------------------------------------------------------------------- 1 | Maintainers: Emmanuel Duchastenier (@educhastenier), 2 | Pascal Garcia (@passga), 3 | Anthony Birembaut (@abirembaut), 4 | Romain Bioteau (@rbioteau) 5 | GitRepo: https://github.com/bonitasoft/bonita-distrib.git 6 | Directory: docker 7 | 8 | Tags: 2022.2-u0, 2022.2, 7.15.0, 7.15 9 | Architectures: amd64, arm64v8, ppc64le 10 | GitFetch: refs/heads/docker/2022.2 11 | GitCommit: 0fbc47d8fcb6629b943b4c1e00052ca14c3d1e1b 12 | 13 | Tags: 2023.1-u0, 2023.1, 8.0.0, 8.0 14 | Architectures: amd64, arm64v8, ppc64le 15 | GitFetch: refs/heads/docker/2023.1 16 | GitCommit: 31dcebbf22ebcce11f8e3a9b9444802136c36c03 17 | 18 | Tags: 2023.2-u0, 2023.2, 9.0.0, 9.0 19 | Architectures: amd64, arm64v8, ppc64le 20 | GitFetch: refs/heads/docker/2023.2 21 | GitCommit: 397824cf4f302c37f3534908728a2b8321a31565 22 | 23 | Tags: 2024.3-u0, 2024.3, 10.2.0, 10.2, latest 24 | Architectures: amd64 25 | GitFetch: refs/heads/docker/2024.3 26 | GitCommit: 634a6e462dbcc7da8ec7ed47adf419b9a24bf744 27 | -------------------------------------------------------------------------------- /library/cassandra: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/docker-library/cassandra/blob/75187df9c5b4b5200e1c59fd46163f087d4f798a/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tianon Gravi (@tianon), 4 | Joseph Ferguson (@yosifkit) 5 | GitRepo: https://github.com/docker-library/cassandra.git 6 | 7 | Tags: 5.0.4, 5.0, 5, latest, 5.0.4-jammy, 5.0-jammy, 5-jammy, jammy 8 | Architectures: amd64, arm32v7, arm64v8, ppc64le, s390x 9 | GitCommit: 0f32c04c976068ddf4b094044bd333ca46d42887 10 | Directory: 5.0 11 | 12 | Tags: 4.1.8, 4.1, 4, 4.1.8-jammy, 4.1-jammy, 4-jammy 13 | Architectures: amd64, arm32v7, arm64v8, ppc64le, s390x 14 | GitCommit: 4acdd8cbbc6f21083e9b8176452a2728fa08f2c7 15 | Directory: 4.1 16 | 17 | Tags: 4.0.17, 4.0, 4.0.17-jammy, 4.0-jammy 18 | Architectures: amd64, arm32v7, arm64v8, ppc64le, s390x 19 | GitCommit: 4acdd8cbbc6f21083e9b8176452a2728fa08f2c7 20 | Directory: 4.0 21 | 22 | Tags: 3.11.19, 3.11, 3, 3.11.19-jammy, 3.11-jammy, 3-jammy 23 | Architectures: amd64, arm32v7, arm64v8, ppc64le 24 | GitCommit: 4acdd8cbbc6f21083e9b8176452a2728fa08f2c7 25 | Directory: 3.11 26 | 27 | Tags: 3.0.32, 3.0, 3.0.32-jammy, 3.0-jammy 28 | Architectures: amd64, arm32v7, arm64v8, ppc64le 29 | GitCommit: 4acdd8cbbc6f21083e9b8176452a2728fa08f2c7 30 | Directory: 3.0 31 | -------------------------------------------------------------------------------- /library/chronograf: -------------------------------------------------------------------------------- 1 | Maintainers: Brandon Pfeifer (@bnpfeife), 2 | Sven Rebhan (@srebhan), 3 | Maya Strandboge (@mstrandboge) 4 | GitRepo: https://github.com/influxdata/influxdata-docker 5 | GitCommit: 9b7081d7e554666a4f6bb8f93f5dac5e0b3b6722 6 | 7 | Tags: 1.7, 1.7.17 8 | Architectures: amd64, arm32v7, arm64v8 9 | Directory: chronograf/1.7 10 | 11 | Tags: 1.7-alpine, 1.7.17-alpine 12 | Directory: chronograf/1.7/alpine 13 | 14 | Tags: 1.8, 1.8.10 15 | Architectures: amd64, arm32v7, arm64v8 16 | Directory: chronograf/1.8 17 | 18 | Tags: 1.8-alpine, 1.8.10-alpine 19 | Directory: chronograf/1.8/alpine 20 | 21 | Tags: 1.9, 1.9.4 22 | Architectures: amd64, arm32v7, arm64v8 23 | Directory: chronograf/1.9 24 | 25 | Tags: 1.9-alpine, 1.9.4-alpine 26 | Directory: chronograf/1.9/alpine 27 | 28 | Tags: 1.10, 1.10.7, latest 29 | Architectures: amd64, arm32v7, arm64v8 30 | Directory: chronograf/1.10 31 | 32 | Tags: 1.10-alpine, 1.10.7-alpine, alpine 33 | Directory: chronograf/1.10/alpine 34 | -------------------------------------------------------------------------------- /library/cirros: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/tianon/docker-brew-cirros/blob/bc178480989db677c1271933567a0555e35856dc/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tianon Gravi (@tianon) 4 | GitRepo: https://github.com/tianon/docker-brew-cirros.git 5 | GitFetch: refs/heads/dist 6 | GitCommit: 1821a0ca9eaf82280a2e953df56e88ab50178628 7 | Architectures: amd64, arm32v7, arm64v8, ppc64le 8 | amd64-Directory: arches/amd64 9 | arm32v7-Directory: arches/arm32v7 10 | arm64v8-Directory: arches/arm64v8 11 | ppc64le-Directory: arches/ppc64le 12 | 13 | Tags: 0.6.3, 0.6, 0, latest 14 | -------------------------------------------------------------------------------- /library/clearlinux: -------------------------------------------------------------------------------- 1 | Maintainers: William Douglas (@bryteise) 2 | GitRepo: https://github.com/clearlinux/docker-brew-clearlinux.git 3 | 4 | Tags: latest, base 5 | GitCommit: 536de2f889e63dbc411cfd408bc57c41f4a8bad2 6 | GitFetch: refs/heads/base-43410 7 | -------------------------------------------------------------------------------- /library/clefos: -------------------------------------------------------------------------------- 1 | Maintainers: The ClefOS Project (@nealef) 2 | GitRepo: https://github.com/nealef/clefos.git 3 | 4 | # https://github.com/docker-library/docs/pull/2477 5 | -------------------------------------------------------------------------------- /library/clickhouse: -------------------------------------------------------------------------------- 1 | # The file is generated by https://github.com/ClickHouse/ClickHouse/blob/e5a98d3e35f2592dfdd559e00f1d8f8b47f12d2e/tests/ci/official_docker.py 2 | 3 | Maintainers: Misha f. Shiryaev (@Felixoid), 4 | Max Kainov (@mkaynov), 5 | Alexander Sapin (@alesapin) 6 | GitRepo: https://github.com/ClickHouse/docker-library.git 7 | GitFetch: refs/heads/main 8 | GitCommit: 5f600937076099ad4f7bee2e9e91d458a491dc8b 9 | 10 | Tags: latest, jammy, 25.4, 25.4-jammy, 25.4.2, 25.4.2-jammy, 25.4.2.31, 25.4.2.31-jammy 11 | Architectures: amd64, arm64v8 12 | Directory: server/25.4.2.31 13 | File: Dockerfile.ubuntu 14 | 15 | Tags: lts, lts-jammy, 25.3, 25.3-jammy, 25.3.3, 25.3.3-jammy, 25.3.3.42, 25.3.3.42-jammy 16 | Architectures: amd64, arm64v8 17 | Directory: server/25.3.3.42 18 | File: Dockerfile.ubuntu 19 | 20 | Tags: 25.2, 25.2-jammy, 25.2.2, 25.2.2-jammy, 25.2.2.39, 25.2.2.39-jammy 21 | Architectures: amd64, arm64v8 22 | Directory: server/25.2.2.39 23 | File: Dockerfile.ubuntu 24 | 25 | Tags: 24.8, 24.8-focal, 24.8.14, 24.8.14-focal, 24.8.14.39, 24.8.14.39-focal 26 | Architectures: amd64, arm64v8 27 | Directory: server/24.8.14.39 28 | File: Dockerfile.ubuntu 29 | -------------------------------------------------------------------------------- /library/composer: -------------------------------------------------------------------------------- 1 | # this file was generated using https://github.com/composer/docker/blob/2c5c50a862f17f2b0bdff0ef623ed5de853ba2a1/generate-stackbrew-library.sh 2 | 3 | Maintainers: Composer (@composer), Rob Bast (@alcohol) 4 | GitRepo: https://github.com/composer/docker.git 5 | Builder: buildkit 6 | 7 | Tags: 2.2.25, 2.2, lts 8 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 9 | GitFetch: refs/heads/main 10 | GitCommit: 722eb1639245daf4cf6980d2de8737e204f56384 11 | Directory: lts 12 | 13 | Tags: 1.10.27, 1.10, 1 14 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 15 | GitFetch: refs/heads/main 16 | GitCommit: 722eb1639245daf4cf6980d2de8737e204f56384 17 | Directory: legacy 18 | 19 | Tags: 2.8.8, 2.8, 2, latest 20 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 21 | GitFetch: refs/heads/main 22 | GitCommit: bb857457676cec69169962eadc2265beaa2d98f9 23 | Directory: latest 24 | -------------------------------------------------------------------------------- /library/convertigo: -------------------------------------------------------------------------------- 1 | Maintainers: Nicolas Albert (@nicolas-albert), Olivier Picciotto (@opicciotto) 2 | GitRepo: https://github.com/convertigo/convertigo 3 | GitCommit: 6003de2a5f91b934f60a9ab731bf45341024f7b6 4 | 5 | Tags: 8.3.5, 8.3, latest 6 | Architectures: amd64, arm64v8 7 | Directory: docker/default -------------------------------------------------------------------------------- /library/couchdb: -------------------------------------------------------------------------------- 1 | # see https://couchdb.apache.org/ 2 | # also the announce@couchdb.apache.org mailing list 3 | 4 | Maintainers: Joan Touzet (@wohali), Jan Lehnardt (@janl), Nick Vatamaniuc (@nickva) 5 | GitRepo: https://github.com/apache/couchdb-docker 6 | GitFetch: refs/heads/main 7 | GitCommit: 2660034027fec97097f88afcc6f8a4416c364b24 8 | 9 | Tags: latest, 3.5.0, 3.5, 3 10 | Architectures: amd64, arm64v8, s390x 11 | Directory: 3.5.0 12 | 13 | Tags: 3.5.0-nouveau, 3.5-nouveau, 3-nouveau 14 | Architectures: amd64, arm64v8, s390x 15 | Directory: 3.5.0-nouveau 16 | 17 | Tags: 3.4.3, 3.4 18 | Architectures: amd64, arm64v8, s390x 19 | Directory: 3.4.3 20 | 21 | Tags: 3.4.3-nouveau, 3.4-nouveau 22 | Architectures: amd64, arm64v8, s390x 23 | Directory: 3.4.3-nouveau 24 | 25 | # 2.3 and 3.1 are FROM debian:buster (EOL) 26 | # https://github.com/docker-library/official-images/pull/17091#issuecomment-2201099734 27 | # 28 | #Tags: 3.1.2, 3.1 29 | #Architectures: amd64, arm64v8 30 | #Directory: 3.1.2 31 | # 32 | #Tags: 2.3.1, 2.3, 2 33 | #Architectures: amd64, arm64v8 34 | #Directory: 2.3.1 35 | 36 | # 1.x is no longer supported by the Apache CouchDB team. 37 | # 38 | # dev, dev-cluster versions must not be published officially per 39 | # ASF release policy, see: 40 | # http://www.apache.org/dev/release-distribution.html#unreleased 41 | # The middle two bullet points are the issue. 42 | -------------------------------------------------------------------------------- /library/crate: -------------------------------------------------------------------------------- 1 | Maintainers: Mathias Fußenegger (@mfussenegger), 2 | Sebastian Utz (@seut), 3 | Michael Kleen (@mkleen), 4 | Andreas Motl (@amotl) 5 | GitRepo: https://github.com/crate/docker-crate.git 6 | 7 | Tags: 5.10.5, 5.10, latest 8 | Architectures: amd64, arm64v8 9 | GitCommit: 97130ba5d0e281dc14187f6c503e98aa26e5ab35 10 | 11 | Tags: 5.9.13, 5.9 12 | Architectures: amd64, arm64v8 13 | GitCommit: 316dbebc6a55792c706d5ea492c41b860ccbcb9c 14 | -------------------------------------------------------------------------------- /library/dart: -------------------------------------------------------------------------------- 1 | Maintainers: Alexander Thomas (@athomas), Ivan Inozemtsev (@iinozemtsev) 2 | GitRepo: https://github.com/dart-lang/dart-docker.git 3 | GitFetch: refs/heads/main 4 | GitCommit: 2ff1146d0172fb02205c6a0fc0082fd8752f0c85 5 | 6 | Tags: 3.7.3-sdk, 3.7-sdk, 3-sdk, stable-sdk, sdk, 3.7.3, 3.7, 3, stable, latest 7 | Architectures: amd64, arm32v7, arm64v8 8 | Directory: stable/bookworm 9 | 10 | Tags: 3.8.0-278.2.beta-sdk, beta-sdk, 3.8.0-278.2.beta, beta 11 | Architectures: amd64, arm32v7, arm64v8 12 | Directory: beta/bookworm 13 | -------------------------------------------------------------------------------- /library/eclipse-mosquitto: -------------------------------------------------------------------------------- 1 | Maintainers: Roger Light (@ralight) 2 | GitRepo: https://github.com/eclipse/mosquitto.git 3 | GitCommit: 44fe135864ee751aa7dacf9923f3d7478339d700 4 | Architectures: amd64, arm32v6, arm64v8, i386, ppc64le, s390x 5 | 6 | Tags: 2.0.21, 2.0.21-openssl, 2.0, 2.0-openssl, 2, 2-openssl, openssl, latest 7 | Directory: docker/2.0-openssl 8 | 9 | Tags: 1.6.15-openssl, 1.6-openssl 10 | Directory: docker/1.6-openssl 11 | -------------------------------------------------------------------------------- /library/eggdrop: -------------------------------------------------------------------------------- 1 | Maintainers: Geo Van O (@vanosg) 2 | GitRepo: https://github.com/eggheads/eggdrop-docker.git 3 | 4 | Tags: develop 5 | Architectures: arm32v6, arm64v8, amd64 6 | GitCommit: 037d27fee1499a17a1062efcba0213801d82c405 7 | Directory: develop 8 | 9 | Tags: 1.9, 1.9.5 10 | Architectures: amd64, arm32v6, arm64v8 11 | GitCommit: 57fb1652a1880665b12e9f51775f173ecde24285 12 | Directory: 1.9 13 | 14 | Tags: 1.10, 1.10.0, stable, latest 15 | Architectures: amd64, arm32v6, arm64v8 16 | GitCommit: 2861815d67478e41667b8ed2cf9d3f13a5e755c1 17 | Directory: 1.10 18 | -------------------------------------------------------------------------------- /library/elasticsearch: -------------------------------------------------------------------------------- 1 | Maintainers: Mark Vieira (@mark-vieira) 2 | GitRepo: https://github.com/elastic/dockerfiles.git 3 | Directory: elasticsearch 4 | Builder: buildkit 5 | 6 | Tags: 7.17.28 7 | Architectures: amd64, arm64v8 8 | GitFetch: refs/heads/7.17 9 | GitCommit: 2ef7e0a0be5abd21cb38a39c3cce65d5278ebfee 10 | 11 | Tags: 8.17.6 12 | Architectures: amd64, arm64v8 13 | GitFetch: refs/heads/8.17 14 | GitCommit: d7216d19313f88d63f43b52df31da2b4ae6ace3c 15 | 16 | Tags: 8.18.1 17 | Architectures: amd64, arm64v8 18 | GitFetch: refs/heads/8.18 19 | GitCommit: bba6738fb5c2e6202a324f07fa028aa36bd1716f 20 | 21 | Tags: 9.0.1 22 | Architectures: amd64, arm64v8 23 | GitFetch: refs/heads/9.0 24 | GitCommit: c1767391264142d319c5aebbc7b44ff935ecb40d 25 | -------------------------------------------------------------------------------- /library/emqx: -------------------------------------------------------------------------------- 1 | Maintainers: Rory Z (@rory-z), Ivan Dyachkov (@id) 2 | GitRepo: https://github.com/emqx/emqx-docker.git 3 | GitFetch: refs/heads/main 4 | 5 | Tags: 5.7.2, 5.7 6 | Architectures: amd64, arm64v8 7 | GitCommit: 35e70c8e602687db5a447c9573bde8ab77335fdc 8 | Directory: 5.7 9 | File: Dockerfile 10 | 11 | Tags: 5.8.6, 5.8, 5, latest 12 | Architectures: amd64, arm64v8 13 | GitCommit: 7324fb36f81404915f97472652e2572f1dda5066 14 | Directory: 5.8 15 | File: Dockerfile 16 | -------------------------------------------------------------------------------- /library/fedora: -------------------------------------------------------------------------------- 1 | Maintainers: Clement Verna (@cverna), Vipul Siddharth (@siddharthvipul) 2 | GitRepo: https://github.com/fedora-cloud/docker-brew-fedora.git 3 | 4 | Tags: 40 5 | Architectures: amd64, arm64v8, ppc64le, s390x 6 | GitFetch: refs/heads/40 7 | GitCommit: f5bdda47877c6a4cbbdef5233fdcfb31e0a96040 8 | amd64-Directory: x86_64/ 9 | arm64v8-Directory: aarch64/ 10 | s390x-Directory: s390x/ 11 | ppc64le-Directory: ppc64le/ 12 | 13 | Tags: 41 14 | Architectures: amd64, arm64v8, ppc64le, s390x 15 | GitFetch: refs/heads/41 16 | GitCommit: 5aee3a684c041e0665d1af1350a245f2286fbf18 17 | amd64-Directory: x86_64/ 18 | arm64v8-Directory: aarch64/ 19 | s390x-Directory: s390x/ 20 | ppc64le-Directory: ppc64le/ 21 | 22 | Tags: 42, latest 23 | Architectures: amd64, arm64v8, ppc64le, s390x 24 | GitFetch: refs/heads/42 25 | GitCommit: 010de8006c2c551b626959423a588bb773fcf412 26 | amd64-Directory: x86_64/ 27 | arm64v8-Directory: aarch64/ 28 | s390x-Directory: s390x/ 29 | ppc64le-Directory: ppc64le/ 30 | 31 | Tags: 43, rawhide 32 | Architectures: amd64, arm64v8, ppc64le, s390x 33 | GitFetch: refs/heads/43 34 | GitCommit: 2ed4770ad9089b377782b204bef1ea738fd30862 35 | amd64-Directory: x86_64/ 36 | arm64v8-Directory: aarch64/ 37 | s390x-Directory: s390x/ 38 | ppc64le-Directory: ppc64le/ -------------------------------------------------------------------------------- /library/fluentd: -------------------------------------------------------------------------------- 1 | Maintainers: Masahiro Nakagawa (@repeatedly), 2 | Fluentd developers (@fluent/admins) 3 | GitRepo: https://github.com/fluent/fluentd-docker-image.git 4 | 5 | # Alpine images 6 | Tags: v1.16.8-1.0, v1.16-1 7 | Architectures: amd64, arm32v6, arm64v8, i386, ppc64le, s390x 8 | GitFetch: refs/heads/v1.16 9 | GitCommit: 98155ec2dea1ae97a4cdedb8853e9be8ec7e7412 10 | Directory: v1.16/alpine 11 | 12 | # Debian images 13 | Tags: v1.16.8-debian-1.0, v1.16-debian-1 14 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, ppc64le, s390x 15 | GitFetch: refs/heads/v1.16 16 | GitCommit: 98155ec2dea1ae97a4cdedb8853e9be8ec7e7412 17 | Directory: v1.16/debian 18 | 19 | # Alpine images 20 | Tags: v1.18.0-1.0, v1.18-1, latest 21 | Architectures: amd64, arm32v6, arm64v8, i386, ppc64le, s390x 22 | GitCommit: 0c3c82df3ec08a46ba346e53c4644cfc667dc703 23 | Directory: v1.18/alpine 24 | 25 | # Debian images 26 | Tags: v1.18.0-debian-1.0, v1.18-debian-1 27 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, ppc64le, s390x 28 | GitCommit: 0c3c82df3ec08a46ba346e53c4644cfc667dc703 29 | Directory: v1.18/debian 30 | -------------------------------------------------------------------------------- /library/friendica: -------------------------------------------------------------------------------- 1 | # This file is generated via https://github.com/friendica/docker/blob/9321c9a1e9b68461c342b85d27bab4046c4c8c38/generate-stackbrew-library.sh 2 | 3 | Maintainers: Friendica (@friendica), Philipp Holzer (@nupplaphil), S. Brusch (@ne20002) 4 | GitRepo: https://github.com/friendica/docker.git 5 | GitFetch: refs/heads/stable 6 | 7 | Tags: 2024.12-apache, apache, stable-apache, 2024.12, latest, stable 8 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 9 | GitCommit: e56a5124cbf9b88e01f0ebeab0b20d6dfeb25f10 10 | Directory: 2024.12/apache 11 | 12 | Tags: 2024.12-fpm, fpm, stable-fpm 13 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 14 | GitCommit: ae4df4f198515a27ab160bd3679cf91183a17cce 15 | Directory: 2024.12/fpm 16 | 17 | Tags: 2024.12-fpm-alpine, fpm-alpine, stable-fpm-alpine 18 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 19 | GitCommit: ae4df4f198515a27ab160bd3679cf91183a17cce 20 | Directory: 2024.12/fpm-alpine 21 | 22 | Tags: 2025.02-dev-apache, dev-apache, 2025.02-dev, dev 23 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 24 | GitCommit: e56a5124cbf9b88e01f0ebeab0b20d6dfeb25f10 25 | Directory: 2025.02-dev/apache 26 | 27 | Tags: 2025.02-dev-fpm, dev-fpm 28 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 29 | GitCommit: ae4df4f198515a27ab160bd3679cf91183a17cce 30 | Directory: 2025.02-dev/fpm 31 | 32 | Tags: 2025.02-dev-fpm-alpine, dev-fpm-alpine 33 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 34 | GitCommit: ae4df4f198515a27ab160bd3679cf91183a17cce 35 | Directory: 2025.02-dev/fpm-alpine 36 | -------------------------------------------------------------------------------- /library/gazebo: -------------------------------------------------------------------------------- 1 | Maintainers: Tully Foote (@tfoote) 2 | GitRepo: https://github.com/osrf/docker_images.git 3 | 4 | ################################################################################ 5 | # Release: 11 6 | 7 | ######################################## 8 | # Distro: ubuntu:focal 9 | 10 | Tags: gzserver11, gzserver11-focal 11 | Architectures: amd64 12 | GitCommit: f7bb3258d4814deec1eca7e46cbb8d7f4b054431 13 | Directory: gazebo/11/ubuntu/focal/gzserver11 14 | 15 | Tags: libgazebo11, libgazebo11-focal, latest 16 | Architectures: amd64 17 | GitCommit: f7bb3258d4814deec1eca7e46cbb8d7f4b054431 18 | Directory: gazebo/11/ubuntu/focal/libgazebo11 19 | 20 | -------------------------------------------------------------------------------- /library/gcc: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/docker-library/gcc/blob/a842bfea737b1127a922a27d768df7e382f740af/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tianon Gravi (@tianon), 4 | Joseph Ferguson (@yosifkit) 5 | GitRepo: https://github.com/docker-library/gcc.git 6 | 7 | # Last Modified: 2025-04-25 8 | Tags: 15.1.0, 15.1, 15, latest, 15.1.0-bookworm, 15.1-bookworm, 15-bookworm, bookworm 9 | Architectures: amd64, arm32v5, arm32v7, arm64v8, ppc64le, s390x 10 | GitCommit: a842bfea737b1127a922a27d768df7e382f740af 11 | Directory: 15 12 | # Docker EOL: 2026-10-25 13 | 14 | # Last Modified: 2024-08-01 15 | Tags: 14.2.0, 14.2, 14, 14.2.0-bookworm, 14.2-bookworm, 14-bookworm 16 | Architectures: amd64, arm32v5, arm32v7, arm64v8, ppc64le, s390x 17 | GitCommit: 22c26a9e4edb4ce4f7676dfa100afc80fc2ccbea 18 | Directory: 14 19 | # Docker EOL: 2026-02-01 20 | 21 | # Last Modified: 2024-05-21 22 | Tags: 13.3.0, 13.3, 13, 13.3.0-bookworm, 13.3-bookworm, 13-bookworm 23 | Architectures: amd64, arm32v5, arm32v7, arm64v8, ppc64le, s390x 24 | GitCommit: b5055bcc1551a7e271af315158e1c260c212409c 25 | Directory: 13 26 | # Docker EOL: 2025-11-21 27 | 28 | # Last Modified: 2024-06-20 29 | Tags: 12.4.0, 12.4, 12, 12.4.0-bookworm, 12.4-bookworm, 12-bookworm 30 | Architectures: amd64, arm32v5, arm32v7, arm64v8, ppc64le, s390x 31 | GitCommit: b5055bcc1551a7e271af315158e1c260c212409c 32 | Directory: 12 33 | # Docker EOL: 2025-12-20 34 | -------------------------------------------------------------------------------- /library/geonetwork: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/geonetwork/docker-geonetwork/blob/85ed3fb1d5ee6de12ef3da11bd8204913cb711a0/generate-stackbrew-library.sh 2 | 3 | Maintainers: Joana Simoes (@doublebyte1), 4 | Juan Luis Rodriguez (@juanluisrp), 5 | Jose Garcia (@josegar74) 6 | GitRepo: https://github.com/geonetwork/docker-geonetwork.git 7 | GitFetch: refs/heads/main 8 | 9 | Tags: 3.12.12, 3.12, 3 10 | Architectures: amd64, arm32v7, arm64v8, ppc64le 11 | GitCommit: 17278beab34080c90454c0b7059bd6b49701f979 12 | Directory: 3.12.12 13 | 14 | Tags: 3.12.12-postgres, 3.12-postgres, 3-postgres 15 | Architectures: amd64, arm32v7, arm64v8, ppc64le 16 | GitCommit: 17278beab34080c90454c0b7059bd6b49701f979 17 | Directory: 3.12.12/postgres 18 | 19 | Tags: 4.2.12, 4.2 20 | Architectures: amd64, arm64v8 21 | GitCommit: a3e15b94330e69449238b4bb0c6e6909f958afa2 22 | Directory: 4.2.12 23 | 24 | Tags: 4.4.7, 4.4, 4, latest 25 | Architectures: amd64, arm64v8 26 | GitCommit: 87a25196b8dd3a8a1bd2bc8644f86c878de2b1d4 27 | Directory: 4.4.7 28 | -------------------------------------------------------------------------------- /library/ghost: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/docker-library/ghost/blob/9287844b7657349ba8f4542b0554c2b4f83dbe52/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tianon Gravi (@tianon), 4 | Joseph Ferguson (@yosifkit), 5 | Austin Burdine (@acburdine) 6 | GitRepo: https://github.com/docker-library/ghost.git 7 | 8 | Tags: 5.119.3, 5.119, 5, latest 9 | Architectures: amd64, arm32v7, arm64v8, ppc64le, s390x 10 | GitCommit: 370aac722c97cb23c49488d077afd13dccfc374b 11 | Directory: 5/debian 12 | 13 | Tags: 5.119.3-alpine, 5.119-alpine, 5-alpine, alpine 14 | Architectures: amd64, arm32v6, arm32v7, arm64v8 15 | GitCommit: 370aac722c97cb23c49488d077afd13dccfc374b 16 | Directory: 5/alpine 17 | -------------------------------------------------------------------------------- /library/groovy: -------------------------------------------------------------------------------- 1 | Maintainers: Keegan Witt (@keeganwitt) 2 | GitRepo: https://github.com/groovy/docker-groovy.git 3 | 4 | Tags: 4.0.25-jdk8, 4.0-jdk8, jdk8, 4.0.25-jdk8-jammy, 4.0-jdk8-jammy, jdk8-jammy 5 | GitFetch: refs/heads/master 6 | Architectures: amd64, arm32v7, arm64v8, ppc64le 7 | GitCommit: 0bf66b24590f71de06ad45107716beacd4a07c06 8 | Directory: jdk8 9 | 10 | Tags: 4.0.25-jdk11, 4.0-jdk11, jdk11, 4.0.25-jdk11-jammy, 4.0-jdk11-jammy, jdk11-jammy 11 | GitFetch: refs/heads/master 12 | Architectures: amd64, arm32v7, arm64v8, ppc64le, s390x 13 | GitCommit: 0bf66b24590f71de06ad45107716beacd4a07c06 14 | Directory: jdk11 15 | 16 | Tags: 4.0.25-jdk11-alpine, 4.0-jdk11-alpine, jdk11-alpine 17 | GitFetch: refs/heads/master 18 | Architectures: amd64 19 | GitCommit: 0bf66b24590f71de06ad45107716beacd4a07c06 20 | Directory: jdk11-alpine 21 | 22 | Tags: 4.0.25-jdk17, 4.0-jdk17, jdk17, 4.0.25-jdk, 4.0-jdk, 4.0.25, 4.0, 4, jdk, latest, 4.0.25-jdk17-jammy, 4.0-jdk17-jammy, jdk17-jammy, 4.0.25-jdk-jammy, 4.0-jdk-jammy, 4.0.25-jammy, 4.0-jammy, 4-jammy, jdk-jammy, jammy 23 | Architectures: amd64, arm32v7, arm64v8, ppc64le, s390x 24 | GitCommit: 0bf66b24590f71de06ad45107716beacd4a07c06 25 | Directory: jdk17 26 | 27 | Tags: 4.0.25-jdk17-alpine, 4.0-jdk17-alpine, jdk17-alpine, 4.0.25-jdk-alpine, 4.0-jdk-alpine, 4.0.25-alpine, 4.0-alpine, 4-alpine, jdk-alpine, alpine 28 | GitFetch: refs/heads/master 29 | Architectures: amd64 30 | GitCommit: 0bf66b24590f71de06ad45107716beacd4a07c06 31 | Directory: jdk17-alpine 32 | 33 | Tags: 4.0.25-jdk21, 4.0-jdk21, jdk21, 4.0.25-jdk21-jammy, 4.0-jdk21-jammy, jdk21-jammy 34 | Architectures: amd64, arm64v8 35 | GitCommit: 0bf66b24590f71de06ad45107716beacd4a07c06 36 | Directory: jdk21 37 | 38 | Tags: 4.0.25-jdk21-alpine, 4.0-jdk21-alpine, jdk21-alpine 39 | GitFetch: refs/heads/master 40 | Architectures: amd64, arm64v8 41 | GitCommit: 0bf66b24590f71de06ad45107716beacd4a07c06 42 | Directory: jdk21-alpine 43 | -------------------------------------------------------------------------------- /library/haskell: -------------------------------------------------------------------------------- 1 | Maintainers: Albert Krewinkel (@tarleb), 2 | Andrei Dziahel (@develop7) 3 | GitRepo: https://github.com/haskell/docker-haskell 4 | 5 | Tags: 9.12.2-bookworm, 9.12-bookworm, 9-bookworm, bookworm, 9.12.2, 9.12, 9, latest 6 | Architectures: amd64, arm64v8 7 | GitCommit: 9f6ddaa037edbbf26bf162c0285264aa3ffda638 8 | Directory: 9.12/bookworm 9 | 10 | Tags: 9.12.2-slim-bookworm, 9.12-slim-bookworm, 9-slim-bookworm, slim-bookworm, 9-slim, slim 11 | Architectures: amd64, arm64v8 12 | GitCommit: 9f6ddaa037edbbf26bf162c0285264aa3ffda638 13 | Directory: 9.12/slim-bookworm 14 | 15 | Tags: 9.10.1-bullseye, 9.10-bullseye, 9-bullseye, bullseye, 9.10.1, 9.10 16 | Architectures: amd64, arm64v8 17 | GitCommit: 9f6ddaa037edbbf26bf162c0285264aa3ffda638 18 | Directory: 9.10/bullseye 19 | 20 | Tags: 9.10.1-slim-bullseye, 9.10-slim-bullseye, 9-slim-bullseye, slim-bullseye 21 | Architectures: amd64, arm64v8 22 | GitCommit: 9f6ddaa037edbbf26bf162c0285264aa3ffda638 23 | Directory: 9.10/slim-bullseye 24 | 25 | Tags: 9.8.4-bullseye, 9.8-bullseye, 9.8.4, 9.8 26 | Architectures: amd64, arm64v8 27 | GitCommit: 9f6ddaa037edbbf26bf162c0285264aa3ffda638 28 | Directory: 9.8/bullseye 29 | 30 | Tags: 9.8.4-slim-bullseye, 9.8-slim-bullseye, 9.8.4-slim, 9.8-slim 31 | Architectures: amd64, arm64v8 32 | GitCommit: 9f6ddaa037edbbf26bf162c0285264aa3ffda638 33 | Directory: 9.8/slim-bullseye 34 | 35 | Tags: 9.6.7-bullseye, 9.6-bullseye, 9.6.7, 9.6 36 | Architectures: amd64, arm64v8 37 | GitCommit: 9f6ddaa037edbbf26bf162c0285264aa3ffda638 38 | Directory: 9.6/bullseye 39 | 40 | Tags: 9.6.7-slim-bullseye, 9.6-slim-bullseye, 9.6.7-slim, 9.6-slim 41 | Architectures: amd64, arm64v8 42 | GitCommit: 9f6ddaa037edbbf26bf162c0285264aa3ffda638 43 | Directory: 9.6/slim-bullseye 44 | -------------------------------------------------------------------------------- /library/hitch: -------------------------------------------------------------------------------- 1 | # this file was generated using https://github.com/varnish/docker-hitch/blob/3fe55c4296018b04c7e1d2efdfcadce9c4017e0a/populate.sh 2 | Maintainers: Thijs Feryn (@thijsferyn), 3 | Guillaume Quintard (@gquintard) 4 | GitRepo: https://github.com/varnish/docker-hitch.git 5 | 6 | Tags: 1, 1.8, 1.8.0, 1.8.0-1, latest 7 | Architectures: amd64, arm32v7, arm64v8, i386, ppc64le, s390x 8 | GitCommit: 3fe55c4296018b04c7e1d2efdfcadce9c4017e0a 9 | -------------------------------------------------------------------------------- /library/httpd: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/docker-library/httpd/blob/bebe68a7d53cd886740d7b2196dae65a7815ec3d/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tianon Gravi (@tianon), 4 | Joseph Ferguson (@yosifkit) 5 | GitRepo: https://github.com/docker-library/httpd.git 6 | 7 | Tags: 2.4.63, 2.4, 2, latest, 2.4.63-bookworm, 2.4-bookworm, 2-bookworm, bookworm 8 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 9 | GitCommit: 329f85a9ad75526de865749a41b273ead99fb69b 10 | Directory: 2.4 11 | 12 | Tags: 2.4.63-alpine, 2.4-alpine, 2-alpine, alpine, 2.4.63-alpine3.21, 2.4-alpine3.21, 2-alpine3.21, alpine3.21 13 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 14 | GitCommit: 329f85a9ad75526de865749a41b273ead99fb69b 15 | Directory: 2.4/alpine 16 | -------------------------------------------------------------------------------- /library/ibmjava: -------------------------------------------------------------------------------- 1 | #ibmjava official images 2 | 3 | Maintainers: Jayashree Gopi (@jayasg12) 4 | GitRepo: https://github.com/ibmruntimes/ci.docker.git 5 | GitFetch: refs/heads/main 6 | 7 | Tags: 8-jre, jre, 8, latest 8 | Architectures: amd64, ppc64le, s390x 9 | GitCommit: 9f1804904c83b71533e810b7605ad93970cb3938 10 | Directory: ibmjava/8/jre/ubuntu 11 | 12 | Tags: 8-sfj, sfj 13 | Architectures: amd64, ppc64le, s390x 14 | GitCommit: 9f1804904c83b71533e810b7605ad93970cb3938 15 | Directory: ibmjava/8/sfj/ubuntu 16 | 17 | Tags: 8-sdk, sdk 18 | Architectures: amd64, ppc64le, s390x 19 | GitCommit: 9f1804904c83b71533e810b7605ad93970cb3938 20 | Directory: ibmjava/8/sdk/ubuntu 21 | 22 | -------------------------------------------------------------------------------- /library/irssi: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/jessfraz/irssi/blob/47d6f81f1b7da4d6e4b9eb0529085f51421562fb/generate-stackbrew-library.sh 2 | 3 | Maintainers: Jessie Frazelle (@jessfraz), 4 | Tianon Gravi (@tianon) 5 | GitRepo: https://github.com/jessfraz/irssi.git 6 | 7 | Tags: 1.4.5, 1.4, 1, latest, 1.4.5-bookworm, 1.4-bookworm, 1-bookworm, bookworm 8 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 9 | GitCommit: b8ea417aaa1a29a6003756627d748450a5bf6abe 10 | Directory: debian 11 | 12 | Tags: 1.4.5-alpine, 1.4-alpine, 1-alpine, alpine, 1.4.5-alpine3.21, 1.4-alpine3.21, 1-alpine3.21, alpine3.21 13 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 14 | GitCommit: 1581d0c09544a0bd8de42ba3d185956be6a9935c 15 | Directory: alpine 16 | -------------------------------------------------------------------------------- /library/kapacitor: -------------------------------------------------------------------------------- 1 | Maintainers: Brandon Pfeifer (@bnpfeife), 2 | Sven Rebhan (@srebhan), 3 | Maya Strandboge (@mstrandboge) 4 | GitRepo: https://github.com/influxdata/influxdata-docker 5 | GitCommit: f4065650506de70c65b6b63234eb5e03e4c33fb6 6 | 7 | Tags: 1.6, 1.6.6 8 | Architectures: amd64, arm64v8 9 | Directory: kapacitor/1.6 10 | 11 | Tags: 1.6-alpine, 1.6.6-alpine 12 | Directory: kapacitor/1.6/alpine 13 | 14 | Tags: 1.7, 1.7.6, latest 15 | Architectures: amd64, arm64v8 16 | Directory: kapacitor/1.7 17 | 18 | Tags: 1.7-alpine, 1.7.6-alpine, alpine 19 | Directory: kapacitor/1.7/alpine 20 | -------------------------------------------------------------------------------- /library/kibana: -------------------------------------------------------------------------------- 1 | Maintainers: Jon Budzenski (@jbudz) 2 | GitRepo: https://github.com/elastic/dockerfiles.git 3 | Directory: kibana 4 | Builder: buildkit 5 | 6 | Tags: 7.17.28 7 | Architectures: amd64, arm64v8 8 | GitFetch: refs/heads/7.17 9 | GitCommit: 2ef7e0a0be5abd21cb38a39c3cce65d5278ebfee 10 | 11 | Tags: 8.17.6 12 | Architectures: amd64, arm64v8 13 | GitFetch: refs/heads/8.17 14 | GitCommit: d7216d19313f88d63f43b52df31da2b4ae6ace3c 15 | 16 | Tags: 8.18.1 17 | Architectures: amd64, arm64v8 18 | GitFetch: refs/heads/8.18 19 | GitCommit: bba6738fb5c2e6202a324f07fa028aa36bd1716f 20 | 21 | Tags: 9.0.1 22 | Architectures: amd64, arm64v8 23 | GitFetch: refs/heads/9.0 24 | GitCommit: c1767391264142d319c5aebbc7b44ff935ecb40d 25 | -------------------------------------------------------------------------------- /library/kong: -------------------------------------------------------------------------------- 1 | Maintainers: Kong Docker Maintainers (@team-gateway-bot) 2 | GitRepo: https://github.com/Kong/docker-kong.git 3 | 4 | Tags: 3.9.0-ubuntu, 3.9-ubuntu, 3.9.0, 3.9, 3, latest, ubuntu 5 | GitCommit: d46098c09b6198efb71682fe7209bd6467bf3f67 6 | GitFetch: refs/tags/3.9.0 7 | Directory: ubuntu 8 | Architectures: amd64, arm64v8 9 | 10 | Tags: 3.8.0-ubuntu, 3.8-ubuntu, 3.8.0, 3.8 11 | GitCommit: 1f5199f7da45c17f4344b811397e89899a160040 12 | GitFetch: refs/tags/3.8.0 13 | Directory: ubuntu 14 | Architectures: amd64, arm64v8 15 | 16 | Tags: 3.7.1-ubuntu, 3.7-ubuntu, 3.7.1, 3.7 17 | GitCommit: 83bc64115d6487c754a6d7fdf43254ad9840058a 18 | GitFetch: refs/tags/3.7.1 19 | Directory: ubuntu 20 | Architectures: amd64, arm64v8 21 | 22 | Tags: 3.6.1-ubuntu, 3.6-ubuntu, 3.6.1, 3.6 23 | GitCommit: 8791499ad78381aff75b4763ea944b0141851089 24 | GitFetch: refs/tags/3.6.1 25 | Directory: ubuntu 26 | Architectures: amd64, arm64v8 27 | 28 | Tags: 3.4.2-ubuntu, 3.4-ubuntu, 3.4.2, 3.4 29 | GitCommit: e07de903edf213445a0540172d51529ac344b448 30 | GitFetch: refs/tags/3.4.2 31 | Directory: ubuntu 32 | Architectures: amd64, arm64v8 33 | 34 | Tags: 2.8.5-alpine, 2.8-alpine, 2.8.5, 2.8, 2 35 | GitCommit: cdf93ae2106f998a2245a3eee6814b1ae68781af 36 | GitFetch: refs/tags/2.8.5 37 | Directory: alpine 38 | Architectures: amd64 39 | 40 | Tags: 2.8.5-ubuntu, 2.8-ubuntu 41 | GitCommit: cdf93ae2106f998a2245a3eee6814b1ae68781af 42 | GitFetch: refs/tags/2.8.5 43 | Directory: ubuntu 44 | Architectures: amd64 45 | 46 | 47 | -------------------------------------------------------------------------------- /library/krakend: -------------------------------------------------------------------------------- 1 | Maintainers: Daniel Ortiz (@taik0), 2 | Daniel López (@kpacha) 3 | GitRepo: https://github.com/krakendio/docker-library.git 4 | 5 | # Alpine images 6 | Tags: 2.10.0, 2.10, 2, latest 7 | Architectures: amd64, arm64v8 8 | GitCommit: e251c6c6db51dcd34e11cc507830cfc200d652c1 9 | Directory: 2.10.0 10 | -------------------------------------------------------------------------------- /library/liquibase: -------------------------------------------------------------------------------- 1 | Maintainers: Jake Newton (@jnewton03) 2 | Architectures: arm64v8, amd64 3 | GitRepo: https://github.com/liquibase/docker.git 4 | 5 | Tags: 4.31, 4.31.1, latest 6 | GitFetch: refs/heads/main 7 | GitCommit: 721daba2f67968383d82ce61e2f6891f444685ee 8 | File: Dockerfile 9 | 10 | Tags: 4.31-alpine, 4.31.1-alpine, alpine 11 | GitFetch: refs/heads/main 12 | GitCommit: 721daba2f67968383d82ce61e2f6891f444685ee 13 | File: Dockerfile.alpine 14 | -------------------------------------------------------------------------------- /library/logstash: -------------------------------------------------------------------------------- 1 | Maintainers: João Duarte (@jsvd) 2 | GitRepo: https://github.com/elastic/dockerfiles.git 3 | Directory: logstash 4 | Builder: buildkit 5 | 6 | Tags: 7.17.28 7 | Architectures: amd64, arm64v8 8 | GitFetch: refs/heads/7.17 9 | GitCommit: 2ef7e0a0be5abd21cb38a39c3cce65d5278ebfee 10 | 11 | Tags: 8.17.6 12 | Architectures: amd64, arm64v8 13 | GitFetch: refs/heads/8.17 14 | GitCommit: d7216d19313f88d63f43b52df31da2b4ae6ace3c 15 | 16 | Tags: 8.18.1 17 | Architectures: amd64, arm64v8 18 | GitFetch: refs/heads/8.18 19 | GitCommit: bba6738fb5c2e6202a324f07fa028aa36bd1716f 20 | 21 | Tags: 9.0.1 22 | Architectures: amd64, arm64v8 23 | GitFetch: refs/heads/9.0 24 | GitCommit: c1767391264142d319c5aebbc7b44ff935ecb40d 25 | -------------------------------------------------------------------------------- /library/mageia: -------------------------------------------------------------------------------- 1 | Maintainers: Juan Luis Baptiste (@juanluisbaptiste) 2 | GitRepo: https://github.com/juanluisbaptiste/docker-brew-mageia.git 3 | 4 | Tags: 9,latest 5 | GitCommit: a33ee87c937363a457b13a30e584e66c0e0a396f 6 | GitFetch: refs/heads/dist 7 | Architectures: amd64, arm32v7, arm64v8 8 | amd64-Directory: dist/9/x86_64 9 | arm32v7-Directory: dist/9/armv7hl 10 | arm64v8-Directory: dist/9/aarch64 11 | 12 | Tags: cauldron 13 | GitCommit: a33ee87c937363a457b13a30e584e66c0e0a396f 14 | GitFetch: refs/heads/dist 15 | Architectures: amd64, arm32v7, arm64v8 16 | amd64-Directory: dist/cauldron/x86_64 17 | arm32v7-Directory: dist/cauldron/armv7hl 18 | arm64v8-Directory: dist/cauldron/aarch64 19 | -------------------------------------------------------------------------------- /library/matomo: -------------------------------------------------------------------------------- 1 | # This file is generated via https://github.com/matomo-org/docker/blob/46d5da6d8958f77248588fe70242627d721dd0bb/generate-stackbrew-library.sh 2 | Maintainers: Matomo Community (@matomo-org) 3 | GitRepo: https://github.com/matomo-org/docker.git 4 | 5 | Tags: 5.3.2-apache, 5.3-apache, 5-apache, apache, 5.3.2, 5.3, 5, latest 6 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 7 | GitCommit: 82fa89f13413cae2cc185416dce5ce4a6baeb618 8 | Directory: apache 9 | 10 | Tags: 5.3.2-fpm, 5.3-fpm, 5-fpm, fpm 11 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 12 | GitCommit: 82fa89f13413cae2cc185416dce5ce4a6baeb618 13 | Directory: fpm 14 | 15 | Tags: 5.3.2-fpm-alpine, 5.3-fpm-alpine, 5-fpm-alpine, fpm-alpine 16 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 17 | GitCommit: 82fa89f13413cae2cc185416dce5ce4a6baeb618 18 | Directory: fpm-alpine 19 | -------------------------------------------------------------------------------- /library/mediawiki: -------------------------------------------------------------------------------- 1 | Maintainers: Kunal Mehta (@legoktm), 2 | addshore (@addshore), 3 | Christian Heusel (@christian-heusel) 4 | GitRepo: https://github.com/wikimedia/mediawiki-docker.git 5 | GitFetch: refs/heads/main 6 | GitCommit: 76236dfa180c94c95410242a17d6dc8603ba3990 7 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, ppc64le 8 | 9 | # current stable & lts version 10 | Tags: 1.43.1, 1.43, latest, stable, lts 11 | Directory: 1.43/apache 12 | 13 | Tags: 1.43.1-fpm, 1.43-fpm, stable-fpm, lts-fpm 14 | Directory: 1.43/fpm 15 | 16 | Tags: 1.43.1-fpm-alpine, 1.43-fpm-alpine, stable-fpm-alpine, lts-fpm-alpine 17 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le 18 | Directory: 1.43/fpm-alpine 19 | 20 | # current legacy versions 21 | Tags: 1.42.6, 1.42, legacy 22 | Directory: 1.42/apache 23 | 24 | Tags: 1.42.6-fpm, 1.42-fpm, legacy-fpm 25 | Directory: 1.42/fpm 26 | 27 | Tags: 1.42.6-fpm-alpine, 1.42-fpm-alpine, legacy-fpm-alpine 28 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le 29 | Directory: 1.42/fpm-alpine 30 | 31 | # current legacy lts version 32 | Tags: 1.39.12, 1.39 33 | Directory: 1.39/apache 34 | 35 | Tags: 1.39.12-fpm, 1.39-fpm 36 | Directory: 1.39/fpm 37 | 38 | Tags: 1.39.12-fpm-alpine, 1.39-fpm-alpine 39 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le 40 | Directory: 1.39/fpm-alpine 41 | -------------------------------------------------------------------------------- /library/memcached: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/docker-library/memcached/blob/9152f806bff0607bbd25bae9e00b55389498e3da/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tianon Gravi (@tianon), 4 | Joseph Ferguson (@yosifkit) 5 | GitRepo: https://github.com/docker-library/memcached.git 6 | 7 | Tags: 1.6.38, 1.6, 1, latest, 1.6.38-bookworm, 1.6-bookworm, 1-bookworm, bookworm 8 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 9 | GitCommit: f8aa037f70e96f77b3797a2ead8fa0e5dcdec2c1 10 | Directory: 1/debian 11 | 12 | Tags: 1.6.38-alpine, 1.6-alpine, 1-alpine, alpine, 1.6.38-alpine3.21, 1.6-alpine3.21, 1-alpine3.21, alpine3.21 13 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 14 | GitCommit: f8aa037f70e96f77b3797a2ead8fa0e5dcdec2c1 15 | Directory: 1/alpine 16 | -------------------------------------------------------------------------------- /library/mongo-express: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/mongo-express/mongo-express-docker/blob/075234363b3c008c7c2e97de8a3639e23a75cfcd/generate-stackbrew-library.sh 2 | 3 | Maintainers: Nick Cox (@knickers), 4 | John Steel (@BlackthornYugen) 5 | GitRepo: https://github.com/mongo-express/mongo-express-docker.git 6 | GitCommit: 075234363b3c008c7c2e97de8a3639e23a75cfcd 7 | 8 | Tags: 1.0.2-20-alpine3.19, 1.0-20-alpine3.19, 1-20-alpine3.19 9 | Architectures: amd64, arm64v8 10 | GitCommit: 403467f350d819b404f3d5150be7776217e810b7 11 | Directory: 1.0/20-alpine3.19 12 | 13 | Tags: 1.0.2-20, 1.0-20, 1-20, 1.0.2-20-alpine3.18, 1.0-20-alpine3.18, 1-20-alpine3.18 14 | Architectures: amd64, arm64v8 15 | GitCommit: 403467f350d819b404f3d5150be7776217e810b7 16 | Directory: 1.0/20-alpine3.18 17 | 18 | Tags: 1.0.2-18-alpine3.19, 1.0-18-alpine3.19, 1-18-alpine3.19 19 | Architectures: amd64, arm64v8 20 | GitCommit: 403467f350d819b404f3d5150be7776217e810b7 21 | Directory: 1.0/18-alpine3.19 22 | 23 | Tags: 1.0.2, 1.0, 1, 1.0.2-18, 1.0-18, 1-18, 1.0.2-18-alpine3.18, 1.0-18-alpine3.18, 1-18-alpine3.18, latest 24 | Architectures: amd64, arm64v8 25 | GitCommit: 403467f350d819b404f3d5150be7776217e810b7 26 | Directory: 1.0/18-alpine3.18 27 | -------------------------------------------------------------------------------- /library/monica: -------------------------------------------------------------------------------- 1 | # This file is generated via https://github.com/monicahq/docker/blob/8c3bcc8d3ab01315ca762c995338083d71c5611e/generate-stackbrew-library.sh 2 | Maintainers: Alexis Saettler (@asbiin) 3 | GitRepo: https://github.com/monicahq/docker.git 4 | GitFetch: refs/heads/main 5 | 6 | Tags: 4.1.2-apache, 4.1-apache, 4-apache, apache, 4.1.2, 4.1, 4, latest 7 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 8 | Directory: 4/apache 9 | GitCommit: 8c3bcc8d3ab01315ca762c995338083d71c5611e 10 | 11 | Tags: 4.1.2-fpm-alpine, 4.1-fpm-alpine, 4-fpm-alpine, fpm-alpine 12 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 13 | Directory: 4/fpm-alpine 14 | GitCommit: 8c3bcc8d3ab01315ca762c995338083d71c5611e 15 | 16 | Tags: 4.1.2-fpm, 4.1-fpm, 4-fpm, fpm 17 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 18 | Directory: 4/fpm 19 | GitCommit: 8c3bcc8d3ab01315ca762c995338083d71c5611e 20 | 21 | Tags: 5.0.0-beta.5-apache, 5.0.0-beta-apache, 5.0-apache 22 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 23 | Directory: 5/apache 24 | GitCommit: 8c3bcc8d3ab01315ca762c995338083d71c5611e 25 | 26 | Tags: 5.0.0-beta.5-fpm-alpine, 5.0.0-beta-fpm-alpine, 5.0-fpm-alpine 27 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 28 | Directory: 5/fpm-alpine 29 | GitCommit: 8c3bcc8d3ab01315ca762c995338083d71c5611e 30 | 31 | Tags: 5.0.0-beta.5-fpm, 5.0.0-beta-fpm, 5.0-fpm 32 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 33 | Directory: 5/fpm 34 | GitCommit: 8c3bcc8d3ab01315ca762c995338083d71c5611e 35 | -------------------------------------------------------------------------------- /library/mono: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/mono/docker/blob/main/generate-stackbrew-library.sh 2 | 3 | Maintainers: Jo Shields (@directhex), 4 | Alexander Köplinger (@akoeplinger) 5 | GitRepo: https://github.com/mono/docker.git 6 | 7 | Tags: 6.12.0.182, latest, 6.12.0, 6.12, 6 8 | Architectures: amd64, i386, arm32v7, arm32v5, arm64v8, ppc64le 9 | GitFetch: refs/heads/main 10 | GitCommit: 9293c0cddf31a3dc829fccc6f8e1eb507a91cd34 11 | Directory: 6.12.0.182 12 | 13 | Tags: 6.12.0.182-slim, slim, 6.12.0-slim, 6.12-slim, 6-slim 14 | Architectures: amd64, i386, arm32v7, arm32v5, arm64v8, ppc64le 15 | GitFetch: refs/heads/main 16 | GitCommit: 9293c0cddf31a3dc829fccc6f8e1eb507a91cd34 17 | Directory: 6.12.0.182/slim 18 | 19 | Tags: 6.10.0.104, 6.10.0, 6.10 20 | Architectures: amd64, i386, arm32v7, arm32v5, arm64v8, ppc64le 21 | GitFetch: refs/heads/main 22 | GitCommit: 0403aaf506b8f6859332a5035f660a7a228d3a97 23 | Directory: 6.10.0.104 24 | 25 | Tags: 6.10.0.104-slim, 6.10.0-slim, 6.10-slim 26 | Architectures: amd64, i386, arm32v7, arm32v5, arm64v8, ppc64le 27 | GitFetch: refs/heads/main 28 | GitCommit: 0403aaf506b8f6859332a5035f660a7a228d3a97 29 | Directory: 6.10.0.104/slim 30 | -------------------------------------------------------------------------------- /library/mysql: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/docker-library/mysql/blob/6faf41e2e9d9d0a2b97d83449830ca75cbee17f9/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tianon Gravi (@tianon), 4 | Joseph Ferguson (@yosifkit) 5 | GitRepo: https://github.com/docker-library/mysql.git 6 | 7 | Tags: 9.3.0, 9.3, 9, innovation, latest, 9.3.0-oraclelinux9, 9.3-oraclelinux9, 9-oraclelinux9, innovation-oraclelinux9, oraclelinux9, 9.3.0-oracle, 9.3-oracle, 9-oracle, innovation-oracle, oracle 8 | Architectures: amd64, arm64v8 9 | GitCommit: 1b9d0c10ad8569c9419d76aacec9dbab23c48e9e 10 | Directory: innovation 11 | File: Dockerfile.oracle 12 | 13 | Tags: 8.4.5, 8.4, 8, lts, 8.4.5-oraclelinux9, 8.4-oraclelinux9, 8-oraclelinux9, lts-oraclelinux9, 8.4.5-oracle, 8.4-oracle, 8-oracle, lts-oracle 14 | Architectures: amd64, arm64v8 15 | GitCommit: 8ade9b2c9a32a79fbaa44b564d09a40744f1d105 16 | Directory: 8.4 17 | File: Dockerfile.oracle 18 | 19 | Tags: 8.0.42, 8.0, 8.0.42-oraclelinux9, 8.0-oraclelinux9, 8.0.42-oracle, 8.0-oracle 20 | Architectures: amd64, arm64v8 21 | GitCommit: 94583e54d3bc02af523af720fdd58f8215287da9 22 | Directory: 8.0 23 | File: Dockerfile.oracle 24 | 25 | Tags: 8.0.42-bookworm, 8.0-bookworm, 8.0.42-debian, 8.0-debian 26 | Architectures: amd64 27 | GitCommit: 94583e54d3bc02af523af720fdd58f8215287da9 28 | Directory: 8.0 29 | File: Dockerfile.debian 30 | -------------------------------------------------------------------------------- /library/notary: -------------------------------------------------------------------------------- 1 | Maintainers: Justin Cormack (@justincormack) 2 | GitRepo: https://github.com/docker/notary-official-images.git 3 | GitCommit: 77b9b7833f8dd6be07104b214193788795a320ff 4 | Architectures: amd64, arm32v6, arm64v8, i386, ppc64le, s390x 5 | Builder: buildkit 6 | 7 | Tags: server-0.7.0, server 8 | Directory: notary-server 9 | 10 | Tags: signer-0.7.0, signer 11 | Directory: notary-signer 12 | -------------------------------------------------------------------------------- /library/odoo: -------------------------------------------------------------------------------- 1 | Maintainers: Christophe Monniez (@d-fence) 2 | GitRepo: https://github.com/odoo/docker 3 | GitCommit: 4cb56b39df0cc06093b6185a609609e1cf264371 4 | 5 | Tags: 18.0-20250428, 18.0, 18, latest 6 | Architectures: amd64, arm64v8, ppc64le 7 | Directory: 18.0 8 | 9 | Tags: 17.0-20250428, 17.0, 17 10 | Architectures: amd64, arm64v8, ppc64le 11 | Directory: 17.0 12 | 13 | Tags: 16.0-20250428, 16.0, 16 14 | Architectures: amd64, arm64v8 15 | Directory: 16.0 16 | 17 | -------------------------------------------------------------------------------- /library/oraclelinux: -------------------------------------------------------------------------------- 1 | Maintainers: Oracle Linux Product Team (@Oracle) 2 | GitRepo: https://github.com/oracle/container-images.git 3 | GitCommit: 5c8a1c296acd6e90487cd261d16cf85fd6bcb73f 4 | GitFetch: refs/heads/master 5 | # https://github.com/oracle/container-images/tree/dist-amd64 6 | amd64-GitFetch: refs/heads/dist-amd64 7 | amd64-GitCommit: dcecdbc89593ae8c411dc5934612db19e80845d4 8 | # https://github.com/oracle/container-images/tree/dist-arm64v8 9 | arm64v8-GitFetch: refs/heads/dist-arm64v8 10 | arm64v8-GitCommit: 6195741453f7b141203203a43d0e0a4db8530c22 11 | 12 | Tags: 9 13 | Architectures: amd64, arm64v8 14 | Directory: 9 15 | 16 | Tags: 9-slim 17 | Architectures: amd64, arm64v8 18 | Directory: 9-slim 19 | 20 | Tags: 9-slim-fips 21 | Architectures: amd64, arm64v8 22 | Directory: 9-slim-fips 23 | 24 | Tags: 8.10, 8 25 | Architectures: amd64, arm64v8 26 | Directory: 8 27 | 28 | Tags: 8-slim 29 | Architectures: amd64, arm64v8 30 | Directory: 8-slim 31 | 32 | Tags: 8-slim-fips 33 | Architectures: amd64, arm64v8 34 | Directory: 8-slim-fips 35 | 36 | Tags: 7.9, 7 37 | Architectures: amd64, arm64v8 38 | Directory: 7 39 | 40 | Tags: 7-slim 41 | Architectures: amd64, arm64v8 42 | Directory: 7-slim 43 | 44 | Tags: 7-slim-fips 45 | Architectures: amd64, arm64v8 46 | Directory: 7-slim-fips 47 | -------------------------------------------------------------------------------- /library/orientdb: -------------------------------------------------------------------------------- 1 | 2 | Maintainers: Tglman (@tglman), 3 | Luigi Dell'Aquila (@luigidellaquila) 4 | 5 | Tags: 3.2.39, 3.2, latest 6 | Architectures: amd64, arm32v7, arm64v8 7 | GitRepo: https://github.com/orientechnologies/orientdb-docker.git 8 | GitCommit: d5fc5b95efa83975ea52419c19f2b2c94e9426d0 9 | Directory: release/3.2.x/3.2.39 10 | 11 | Tags: 3.2.39-tp3, 3.2-tp3 12 | Architectures: amd64, arm32v7, arm64v8 13 | GitRepo: https://github.com/orientechnologies/orientdb-docker.git 14 | GitCommit: d5fc5b95efa83975ea52419c19f2b2c94e9426d0 15 | Directory: release/3.2.x/3.2.39-tp3 16 | 17 | Tags: 3.1.20, 3.1 18 | GitRepo: https://github.com/orientechnologies/orientdb-docker.git 19 | GitCommit: a8a42acbe19dad60a051afe08ed625e66587dd37 20 | Directory: release/3.1.x/3.1.20 21 | 22 | Tags: 3.1.20-tp3, 3.1-tp3 23 | GitRepo: https://github.com/orientechnologies/orientdb-docker.git 24 | GitCommit: a8a42acbe19dad60a051afe08ed625e66587dd37 25 | Directory: release/3.1.x/3.1.20-tp3 26 | -------------------------------------------------------------------------------- /library/percona: -------------------------------------------------------------------------------- 1 | Maintainers: Evgeniy Patlan (@EvgeniyPatlan), 2 | Viacheslav Sarzhan (@hors), 3 | Oleksandr Miroshnychenko (@vorsel), 4 | Vadim Yalovets (@adivinho), 5 | Surabhi Bhat (@surbhat1595) 6 | GitRepo: https://github.com/percona/percona-docker.git 7 | GitFetch: refs/heads/main 8 | Architectures: amd64 9 | 10 | Tags: 8.0.41-32-centos, 8.0-centos, 8-centos, 8.0.41-32, 8.0, 8, ps-8.0.41-32, ps-8.0, ps-8 11 | GitCommit: 73ddc25d7165fa77bda3e92191ec2fc5536c500a 12 | Directory: percona-server-8.0 13 | File: Dockerfile-dockerhub 14 | 15 | Tags: psmdb-8.0.4, psmdb-8.0 16 | GitCommit: 01836bbd1b62ad6ee28226986b2d7fff660523b6 17 | Directory: percona-server-mongodb-8.0 18 | File: Dockerfile-dockerhub 19 | 20 | Tags: psmdb-7.0.16, psmdb-7.0 21 | GitCommit: 01836bbd1b62ad6ee28226986b2d7fff660523b6 22 | Directory: percona-server-mongodb-7.0 23 | File: Dockerfile-dockerhub 24 | 25 | Tags: psmdb-6.0.21, psmdb-6.0 26 | GitCommit: 01836bbd1b62ad6ee28226986b2d7fff660523b6 27 | Directory: percona-server-mongodb-6.0 28 | File: Dockerfile-dockerhub 29 | -------------------------------------------------------------------------------- /library/photon: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/vmware/photon-docker-image/blob/c48f588cebc54dba10db21c75d4354a03fa6ebc2/generate-stackbrew-library.sh 2 | Maintainers: Michelle Wang (@michellew), 3 | Alexey Makhalov (@YustasSwamp) 4 | GitRepo: https://github.com/vmware/photon-docker-image.git 5 | Directory: docker 6 | 7 | 8 | Tags: 5.0, 5.0-20250427, latest 9 | Architectures: amd64, arm64v8 10 | GitFetch: refs/heads/x86_64/5.0-20250427 11 | GitCommit: 41a2d9175642cf2da9f33b817c28aa2c01919d70 12 | arm64v8-GitFetch: refs/heads/aarch64/5.0-20250427 13 | arm64v8-GitCommit: 31c954d91dfb413703c4ed725200055b42f48d2b 14 | 15 | Tags: 4.0, 4.0-20250506 16 | Architectures: amd64, arm64v8 17 | GitFetch: refs/heads/x86_64/4.0-20250506 18 | GitCommit: 464d6fc28670cad9b2e065de98a2048fcc1f3a4d 19 | arm64v8-GitFetch: refs/heads/aarch64/4.0-20250506 20 | arm64v8-GitCommit: 3d3e6e03d11d51a2a78297caf59cac4007530568 21 | 22 | Tags: 3.0, 3.0-20250316 23 | Architectures: amd64, arm64v8 24 | GitFetch: refs/heads/x86_64/3.0-20250316 25 | GitCommit: f848d5df815c0afe76b42a608d49df0e87af51c2 26 | arm64v8-GitFetch: refs/heads/aarch64/3.0-20250316 27 | arm64v8-GitCommit: 93a0c62b9b7790fc27d1413f65073ef1a2894bab 28 | -------------------------------------------------------------------------------- /library/php-zendserver: -------------------------------------------------------------------------------- 1 | Maintainers: Heigo Sinilind (@hsinilind), 2 | Rain Viigipuu (@rainviigipuu) 3 | GitRepo: https://github.com/zendtech/php-zendserver-docker.git 4 | GitCommit: bcd65b82acb4f3b5b67f8c657c52f08bc52d8789 5 | 6 | # https://github.com/docker-library/docs/pull/2475 7 | -------------------------------------------------------------------------------- /library/phpmyadmin: -------------------------------------------------------------------------------- 1 | # This file is generated via https://github.com/phpmyadmin/docker/blob/272944cc5a10f7740acacbe2a35c2c1f6d9a98c7/generate-stackbrew-library.sh 2 | Maintainers: Isaac Bennetch (@ibennetch), 3 | William Desportes (@williamdes) 4 | GitRepo: https://github.com/phpmyadmin/docker.git 5 | 6 | Tags: 5.2.2-apache, 5.2-apache, 5-apache, apache, 5.2.2, 5.2, 5, latest 7 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 8 | GitCommit: 188a0e35423fb615db47e6a0a8209fe7288eb2ed 9 | Directory: apache 10 | 11 | Tags: 5.2.2-fpm, 5.2-fpm, 5-fpm, fpm 12 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 13 | GitCommit: 188a0e35423fb615db47e6a0a8209fe7288eb2ed 14 | Directory: fpm 15 | 16 | Tags: 5.2.2-fpm-alpine, 5.2-fpm-alpine, 5-fpm-alpine, fpm-alpine 17 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 18 | GitCommit: 216be795f7a1a60c2c27ff5d00b5c8476771e1d1 19 | Directory: fpm-alpine 20 | -------------------------------------------------------------------------------- /library/plone: -------------------------------------------------------------------------------- 1 | Maintainers: Alin Voinea (@avoinea), 2 | Piero Nicolli (@pnicolli), 3 | Sven Strack (@svx), 4 | Antonio De Marinis (@demarant), 5 | Iulian Petchesi (@Petchesi-Iulian), 6 | Valentin Dumitru (@valipod) 7 | GitRepo: https://github.com/plone/plone.docker.git 8 | 9 | Tags: 5.2.14-python38, 5.2-python38, 5-python38, python38, 5.2.14, 5.2, 5, latest 10 | Architectures: amd64 11 | GitCommit: a3a9c7e0c5ca324f488fe7354f00a997398195f7 12 | Directory: 5.2/5.2.14/debian 13 | -------------------------------------------------------------------------------- /library/postfixadmin: -------------------------------------------------------------------------------- 1 | # This file is generated via https://github.com/postfixadmin/docker/blob/026b5667e218aa4ad24ea9d3d05cbf4dc425ae58/generate-stackbrew-library.sh 2 | Maintainers: David Goodwin (@DavidGoodwin) 3 | GitRepo: https://github.com/postfixadmin/docker.git 4 | 5 | Tags: 3.3.15-apache, 3.3-apache, 3-apache, apache, 3.3.15, 3.3, 3, latest 6 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 7 | Directory: apache 8 | GitCommit: 8fbed5d8d6b140e7c3c417a9dc45aafd5bdff774 9 | 10 | Tags: 3.3.15-fpm, 3.3-fpm, 3-fpm, fpm 11 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 12 | Directory: fpm 13 | GitCommit: 8fbed5d8d6b140e7c3c417a9dc45aafd5bdff774 14 | 15 | Tags: 3.3.15-fpm-alpine, 3.3-fpm-alpine, 3-fpm-alpine, fpm-alpine 16 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 17 | Directory: fpm-alpine 18 | GitCommit: 8fbed5d8d6b140e7c3c417a9dc45aafd5bdff774 19 | -------------------------------------------------------------------------------- /library/r-base: -------------------------------------------------------------------------------- 1 | Maintainers: Carl Boettiger (@cboettig), 2 | Dirk Eddelbuettel (@eddelbuettel) 3 | GitRepo: https://github.com/rocker-org/rocker.git 4 | 5 | Tags: 4.5.0, latest 6 | Architectures: amd64, arm64v8, ppc64le, s390x 7 | GitCommit: 995a8e88700f11166ab858fed1356948b9834545 8 | Directory: r-base/4.5.0 9 | 10 | -------------------------------------------------------------------------------- /library/rakudo-star: -------------------------------------------------------------------------------- 1 | Maintainers: Moritz Lenz (@moritz), 2 | Joelle Maslak (@jmaslak), 3 | Daniel Mita (@m-dango), 4 | Anton Oks (@AntonOks) 5 | GitRepo: https://github.com/rakudo/docker 6 | 7 | Tags: latest, 2025.02, bookworm 8 | Architectures: amd64, arm64v8 9 | GitCommit: 02696336f52874a3440ae2fa8f2cbf2a7c6176dd 10 | Directory: 2025.02/bookworm 11 | 12 | Tags: alpine, 2025.02-alpine 13 | Architectures: amd64, arm64v8 14 | GitCommit: 02696336f52874a3440ae2fa8f2cbf2a7c6176dd 15 | Directory: 2025.02/alpine 16 | -------------------------------------------------------------------------------- /library/redmine: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/docker-library/redmine/blob/f18c3977c16a9c404017a5dc924720eedbf34c78/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tianon Gravi (@tianon), 4 | Joseph Ferguson (@yosifkit) 5 | GitRepo: https://github.com/docker-library/redmine.git 6 | 7 | Tags: 6.0.5, 6.0, 6, latest, 6.0.5-bookworm, 6.0-bookworm, 6-bookworm, bookworm 8 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 9 | GitCommit: 79fdb4829c95432ad05877fea0b27793b35bfd6f 10 | Directory: 6.0/bookworm 11 | 12 | Tags: 6.0.5-alpine3.21, 6.0-alpine3.21, 6-alpine3.21, alpine3.21, 6.0.5-alpine, 6.0-alpine, 6-alpine, alpine 13 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 14 | GitCommit: 79fdb4829c95432ad05877fea0b27793b35bfd6f 15 | Directory: 6.0/alpine3.21 16 | 17 | Tags: 6.0.5-alpine3.20, 6.0-alpine3.20, 6-alpine3.20, alpine3.20 18 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 19 | GitCommit: 79fdb4829c95432ad05877fea0b27793b35bfd6f 20 | Directory: 6.0/alpine3.20 21 | 22 | Tags: 5.1.8, 5.1, 5, 5.1.8-bookworm, 5.1-bookworm, 5-bookworm 23 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 24 | GitCommit: a000f11a67e7e7f315398fb83a9262e47998b663 25 | Directory: 5.1/bookworm 26 | 27 | Tags: 5.1.8-alpine3.21, 5.1-alpine3.21, 5-alpine3.21, 5.1.8-alpine, 5.1-alpine, 5-alpine 28 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 29 | GitCommit: a000f11a67e7e7f315398fb83a9262e47998b663 30 | Directory: 5.1/alpine3.21 31 | 32 | Tags: 5.1.8-alpine3.20, 5.1-alpine3.20, 5-alpine3.20 33 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 34 | GitCommit: a000f11a67e7e7f315398fb83a9262e47998b663 35 | Directory: 5.1/alpine3.20 36 | -------------------------------------------------------------------------------- /library/registry: -------------------------------------------------------------------------------- 1 | Maintainers: Milos Gajdos (@milosgajdos), 2 | Sebastiaan van Stijn (@thajeztah) 3 | GitRepo: https://github.com/distribution/distribution-library-image.git 4 | GitFetch: refs/heads/master 5 | 6 | Tags: 3.0.0, 3.0, 3, latest 7 | Architectures: amd64, arm64v8, arm32v6, arm32v7, ppc64le, s390x, riscv64 8 | GitCommit: f83883590f5afda69afafbc5aaa5fde3686f47cf 9 | 10 | Tags: 2.8.3, 2.8, 2 11 | Architectures: amd64, arm64v8, arm32v6, arm32v7, ppc64le, s390x 12 | GitCommit: 39dd72feaab7066334829d6945c54bc51a0aee98 13 | -------------------------------------------------------------------------------- /library/rethinkdb: -------------------------------------------------------------------------------- 1 | Maintainers: RethinkDB (@gabor-boros) 2 | GitRepo: https://github.com/rethinkdb/rethinkdb-dockerfiles.git 3 | 4 | Tags: 2.4.4-bookworm-slim, 2.4-bookworm-slim, 2-bookworm-slim, bookworm-slim, 2.4.3, 2.4, 2, latest 5 | Directory: bookworm/2.4.4 6 | GitCommit: 48876a66c3be922c6b01c436bf78d662e53bceef 7 | Architectures: amd64, arm64v8, s390x 8 | -------------------------------------------------------------------------------- /library/rocket.chat: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/RocketChat/Docker.Official.Image/blob/2a9ae8ec5a776e46c525a9f2834aebed3bcc1740/stackbrew.js 2 | 3 | Maintainers: Rocket.Chat Image Team (@RocketChat) 4 | GitRepo: https://github.com/RocketChat/Docker.Official.Image.git 5 | GitFetch: refs/heads/main 6 | 7 | Tags: 7.5.1, 7.5, 7, latest 8 | GitCommit: 21fc4da79e661f052063606584195cf342730fbc 9 | Directory: 7.5 10 | 11 | Tags: 7.4.2, 7.4 12 | GitCommit: 21fc4da79e661f052063606584195cf342730fbc 13 | Directory: 7.4 14 | 15 | Tags: 7.3.4, 7.3 16 | GitCommit: 3298af870432633166621cf11ba33105ca062a4e 17 | Directory: 7.3 18 | 19 | Tags: 7.2.5, 7.2 20 | GitCommit: 128a267feefa95572213f84274b34db155a87d9b 21 | Directory: 7.2 22 | 23 | Tags: 7.1.5, 7.1 24 | GitCommit: 128a267feefa95572213f84274b34db155a87d9b 25 | Directory: 7.1 26 | 27 | Tags: 7.0.9, 7.0 28 | GitCommit: 128a267feefa95572213f84274b34db155a87d9b 29 | Directory: 7.0 30 | 31 | Tags: 6.13.1, 6.13, 6 32 | GitCommit: 2604071c1f2f2d4300262347a33c03bac25918fc 33 | Directory: 6.13 34 | 35 | -------------------------------------------------------------------------------- /library/rust: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/rust-lang/docker-rust/blob/34adb91f94a518191d60abfcc81f0f6b32db0ad8/x.py 2 | 3 | Maintainers: Steven Fackler (@sfackler), 4 | Scott Schafer (@Muscraft) 5 | GitRepo: https://github.com/rust-lang/docker-rust.git 6 | 7 | Tags: 1-bullseye, 1.86-bullseye, 1.86.0-bullseye, bullseye 8 | Architectures: amd64, arm32v7, arm64v8, i386 9 | GitCommit: 4c319c1b759ebc1f3452f2c3b62f75b509baa4e6 10 | Directory: stable/bullseye 11 | 12 | Tags: 1-slim-bullseye, 1.86-slim-bullseye, 1.86.0-slim-bullseye, slim-bullseye 13 | Architectures: amd64, arm32v7, arm64v8, i386 14 | GitCommit: 4c319c1b759ebc1f3452f2c3b62f75b509baa4e6 15 | Directory: stable/bullseye/slim 16 | 17 | Tags: 1-bookworm, 1.86-bookworm, 1.86.0-bookworm, bookworm, 1, 1.86, 1.86.0, latest 18 | Architectures: amd64, arm32v7, arm64v8, i386, ppc64le, s390x 19 | GitCommit: 4c319c1b759ebc1f3452f2c3b62f75b509baa4e6 20 | Directory: stable/bookworm 21 | 22 | Tags: 1-slim-bookworm, 1.86-slim-bookworm, 1.86.0-slim-bookworm, slim-bookworm, 1-slim, 1.86-slim, 1.86.0-slim, slim 23 | Architectures: amd64, arm32v7, arm64v8, i386, ppc64le, s390x 24 | GitCommit: 4c319c1b759ebc1f3452f2c3b62f75b509baa4e6 25 | Directory: stable/bookworm/slim 26 | 27 | Tags: 1-alpine3.20, 1.86-alpine3.20, 1.86.0-alpine3.20, alpine3.20 28 | Architectures: amd64, arm64v8 29 | GitCommit: 4c319c1b759ebc1f3452f2c3b62f75b509baa4e6 30 | Directory: stable/alpine3.20 31 | 32 | Tags: 1-alpine3.21, 1.86-alpine3.21, 1.86.0-alpine3.21, alpine3.21, 1-alpine, 1.86-alpine, 1.86.0-alpine, alpine 33 | Architectures: amd64, arm64v8 34 | GitCommit: 4c319c1b759ebc1f3452f2c3b62f75b509baa4e6 35 | Directory: stable/alpine3.21 36 | 37 | -------------------------------------------------------------------------------- /library/satosa: -------------------------------------------------------------------------------- 1 | # This file is generated via https://github.com/IdentityPython/satosa-docker/blob/9c8b9a9f2fd6d095944637f658f2d2dccf68259b/generate-stackbrew-library.sh 2 | 3 | Maintainers: Matthew X. Economou (@niheconomoum) 4 | GitRepo: https://github.com/IdentityPython/satosa-docker.git 5 | GitFetch: refs/heads/main 6 | 7 | Tags: 8.4.0-bookworm, 8.4-bookworm, 8-bookworm, bookworm 8 | SharedTags: 8.4.0, 8.4, 8, latest 9 | Architectures: amd64, arm64v8 10 | GitCommit: 69038a84d541717d66420f3ad8ec7c9da22c91b4 11 | Directory: 8.4/bookworm 12 | 13 | Tags: 8.4.0-alpine3.19, 8.4-alpine3.19, 8-alpine3.19, alpine3.19, 8.4.0-alpine, 8.4-alpine, 8-alpine, alpine 14 | Architectures: amd64, arm32v7, arm64v8, i386, ppc64le 15 | GitCommit: 74a847396f1190ec26679fc3bf09ffcc42d2e999 16 | Directory: 8.4/alpine3.19 17 | -------------------------------------------------------------------------------- /library/silverpeas: -------------------------------------------------------------------------------- 1 | # This file is generated via https://github.com/Silverpeas/docker-silverpeas-prod/blob/master/generate-docker-library.sh 2 | Maintainers: Miguel Moquillon (@mmoqui) 3 | GitRepo: https://github.com/Silverpeas/docker-silverpeas-prod.git 4 | 5 | Tags: 6.4.3, latest 6 | GitCommit: 79cad3dae9a20fb2fb404fba5641c5921d410112 7 | GitFetch: refs/heads/6.4.x 8 | 9 | Tags: 6.3.6 10 | GitCommit: f0a4c728794ad0e1f06de88cbea9599489634bf6 11 | GitFetch: refs/heads/6.3.x 12 | -------------------------------------------------------------------------------- /library/solr: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/apache/solr-docker/blob/1758215f91ed62b184ffabac059b4fcb265c4649/generate-stackbrew-library.sh 2 | 3 | Maintainers: The Apache Solr Project (@asfbot), 4 | Shalin Mangar (@shalinmangar), 5 | David Smiley (@dsmiley), 6 | Jan Høydahl (@janhoy), 7 | Houston Putman (@houstonputman) 8 | GitRepo: https://github.com/apache/solr-docker.git 9 | GitFetch: refs/heads/main 10 | 11 | Tags: 9.8.1, 9.8, 9, latest 12 | Architectures: amd64, arm64v8, ppc64le, s390x 13 | GitCommit: fd6589c6455c184356b93880265f17c645840405 14 | Directory: 9.8 15 | 16 | Tags: 9.8.1-slim, 9.8-slim, 9-slim, slim 17 | Architectures: amd64, arm64v8, ppc64le, s390x 18 | GitCommit: fd6589c6455c184356b93880265f17c645840405 19 | Directory: 9.8-slim 20 | 21 | Tags: 9.7.0, 9.7 22 | Architectures: amd64, arm64v8, ppc64le, s390x 23 | GitCommit: cabde2a16c99aa974e1882df2c55ca17eab0bd17 24 | Directory: 9.7 25 | 26 | Tags: 9.7.0-slim, 9.7-slim 27 | Architectures: amd64, arm64v8, ppc64le, s390x 28 | GitCommit: cabde2a16c99aa974e1882df2c55ca17eab0bd17 29 | Directory: 9.7-slim 30 | 31 | Tags: 8.11.4, 8.11, 8 32 | Architectures: amd64, arm64v8, ppc64le, s390x 33 | GitCommit: f11dfe66709370492d5b7b251d5eba5d70b8301d 34 | Directory: 8.11 35 | 36 | Tags: 8.11.4-slim, 8.11-slim, 8-slim 37 | Architectures: amd64, arm64v8, ppc64le, s390x 38 | GitCommit: f11dfe66709370492d5b7b251d5eba5d70b8301d 39 | Directory: 8.11-slim 40 | -------------------------------------------------------------------------------- /library/spiped: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/TimWolla/docker-spiped/blob/f1f01eb79a88ece779c33acdd75ca29c879cac63/generate-stackbrew-library.sh 2 | 3 | Maintainers: Tim Düsterhus (@TimWolla) 4 | GitRepo: https://github.com/TimWolla/docker-spiped.git 5 | GitFetch: refs/heads/main 6 | 7 | Tags: 1.6.4, 1.6, 1, latest 8 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 9 | GitCommit: 6cfa21da993903156ca7347b6f0f9e8111d46671 10 | Directory: 1.6 11 | 12 | Tags: 1.6.4-alpine, 1.6-alpine, 1-alpine, alpine 13 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 14 | GitCommit: 6cfa21da993903156ca7347b6f0f9e8111d46671 15 | Directory: 1.6/alpine 16 | -------------------------------------------------------------------------------- /library/storm: -------------------------------------------------------------------------------- 1 | Maintainers: The Apache Storm Project (@asfbot), 2 | Julien Nioche (@jnioche), 3 | Richard Zowalla (@rzo1) 4 | GitRepo: https://github.com/apache/storm-docker.git 5 | Architectures: amd64, arm64v8 6 | 7 | Tags: 2.8.0, 2.8, latest 8 | GitCommit: fefacef2f400d8f437675b11e08bc6098a91c188 9 | Directory: 2.8.0 10 | 11 | Tags: 2.8.0-jre17, 2.8-jre17 12 | GitCommit: fefacef2f400d8f437675b11e08bc6098a91c188 13 | Directory: 2.8.0 14 | -------------------------------------------------------------------------------- /library/swipl: -------------------------------------------------------------------------------- 1 | Maintainers: Jan Wielemaker (@JanWielemaker), 2 | Dave Curylo (@ninjarobot) 3 | GitRepo: https://github.com/SWI-Prolog/docker-swipl.git 4 | GitCommit: b1a43b5121847a6ca5db26c4651149a1c813ae6a 5 | Architectures: amd64, arm32v7, arm64v8 6 | 7 | Tags: latest, 9.3.23 8 | Directory: 9.3.23/bookworm 9 | 10 | Tags: stable, 9.2.9 11 | Directory: 9.2.9/bookworm 12 | -------------------------------------------------------------------------------- /library/teamspeak: -------------------------------------------------------------------------------- 1 | Maintainers: Thorsten Weinz (@thorwe), 2 | Hubert Nöbauer (@HuppiN) 3 | GitRepo: https://github.com/TeamSpeak-Systems/teamspeak-linux-docker-images 4 | 5 | Tags: 3.13, 3.13.7, latest 6 | GitCommit: f5f1e7f6142e8eeebb8d46d7b493b5d3ec01d599 7 | Directory: alpine 8 | -------------------------------------------------------------------------------- /library/telegraf: -------------------------------------------------------------------------------- 1 | Maintainers: Sven Rebhan (@srebhan), 2 | Maya Strandboge (@mstrandboge), 3 | Sunil Kartikey (@skartikey) 4 | GitRepo: https://github.com/influxdata/influxdata-docker.git 5 | GitCommit: 683532295e6664614b8cdf0dc801247b12983608 6 | 7 | 8 | Tags: 1.32, 1.32.3 9 | Architectures: amd64, arm32v7, arm64v8 10 | Directory: telegraf/1.32 11 | 12 | Tags: 1.32-alpine, 1.32.3-alpine 13 | Architectures: amd64, arm64v8 14 | Directory: telegraf/1.32/alpine 15 | 16 | Tags: 1.33, 1.33.3 17 | Architectures: amd64, arm32v7, arm64v8 18 | Directory: telegraf/1.33 19 | 20 | Tags: 1.33-alpine, 1.33.3-alpine 21 | Architectures: amd64, arm64v8 22 | Directory: telegraf/1.33/alpine 23 | 24 | Tags: 1.34, 1.34.3, latest 25 | Architectures: amd64, arm32v7, arm64v8 26 | Directory: telegraf/1.34 27 | 28 | Tags: 1.34-alpine, 1.34.3-alpine, alpine 29 | Architectures: amd64, arm64v8 30 | Directory: telegraf/1.34/alpine 31 | -------------------------------------------------------------------------------- /library/varnish: -------------------------------------------------------------------------------- 1 | # this file was generated using https://github.com/varnish/docker-varnish/blob/bb0f2990f25fcd852f3fd66f7e7bc254c436226d/populate.sh 2 | Maintainers: Guillaume Quintard (@gquintard) 3 | GitRepo: https://github.com/varnish/docker-varnish.git 4 | 5 | Tags: fresh, 7.7.1, 7, 7.7, latest 6 | Architectures: amd64, arm32v7, arm64v8, i386, ppc64le, s390x 7 | Directory: fresh/debian 8 | GitCommit: ea97ed35f2b0eb438ccd6a9250c36567686bfb4a 9 | 10 | Tags: fresh-alpine, 7.7.1-alpine, 7-alpine, 7.7-alpine, alpine 11 | Architectures: amd64, arm32v7, arm64v8, i386, ppc64le, s390x 12 | Directory: fresh/alpine 13 | GitCommit: ea97ed35f2b0eb438ccd6a9250c36567686bfb4a 14 | 15 | Tags: old, 7.6.3, 7.6 16 | Architectures: amd64, arm32v7, arm64v8, i386, ppc64le, s390x 17 | Directory: old/debian 18 | GitCommit: ea97ed35f2b0eb438ccd6a9250c36567686bfb4a 19 | 20 | Tags: old-alpine, 7.6.3-alpine, 7.6-alpine 21 | Architectures: amd64, arm32v7, arm64v8, i386, ppc64le, s390x 22 | Directory: old/alpine 23 | GitCommit: ea97ed35f2b0eb438ccd6a9250c36567686bfb4a 24 | 25 | Tags: stable, 6.0.14, 6.0 26 | Architectures: amd64, arm32v7, arm64v8, i386, ppc64le, s390x 27 | Directory: stable/debian 28 | GitCommit: ea97ed35f2b0eb438ccd6a9250c36567686bfb4a 29 | -------------------------------------------------------------------------------- /library/xwiki: -------------------------------------------------------------------------------- 1 | Maintainers: XWiki Core Dev Team (@xwiki) 2 | GitRepo: https://github.com/xwiki-contrib/docker-xwiki.git 3 | 4 | # Stable 5 | Tags: 17, 17.3, 17.3.0, 17-mysql-tomcat, 17.3-mysql-tomcat, 17.3.0-mysql-tomcat, mysql-tomcat, stable-mysql-tomcat, stable-mysql, stable, latest 6 | Architectures: amd64, arm64v8 7 | Directory: 17/mysql-tomcat 8 | GitCommit: 71a0c005e146907701301188b381e917638d7d1c 9 | 10 | Tags: 17-postgres-tomcat, 17.3-postgres-tomcat, 17.3.0-postgres-tomcat, postgres-tomcat, stable-postgres-tomcat, stable-postgres 11 | Architectures: amd64, arm64v8 12 | Directory: 17/postgres-tomcat 13 | GitCommit: 71a0c005e146907701301188b381e917638d7d1c 14 | 15 | Tags: 17-mariadb-tomcat, 17.3-mariadb-tomcat, 17.3.0-mariadb-tomcat, mariadb-tomcat, stable-mariadb-tomcat, stable-mariadb 16 | Architectures: amd64, arm64v8 17 | Directory: 17/mariadb-tomcat 18 | GitCommit: 71a0c005e146907701301188b381e917638d7d1c 19 | 20 | # LTS 21 | Tags: 16, 16.10, 16.10.8, 16-mysql-tomcat, 16.10-mysql-tomcat, 16.10.8-mysql-tomcat, lts-mysql-tomcat, lts-mysql, lts 22 | Architectures: amd64, arm64v8 23 | Directory: 16/mysql-tomcat 24 | GitCommit: 432858b827200132c33219374999c43a4a8d6f5b 25 | 26 | Tags: 16-postgres-tomcat, 16.10-postgres-tomcat, 16.10.8-postgres-tomcat, lts-postgres-tomcat, lts-postgres 27 | Architectures: amd64, arm64v8 28 | Directory: 16/postgres-tomcat 29 | GitCommit: 432858b827200132c33219374999c43a4a8d6f5b 30 | 31 | Tags: 16-mariadb-tomcat, 16.10-mariadb-tomcat, 16.10.8-mariadb-tomcat, lts-mariadb-tomcat, lts-mariadb 32 | Architectures: amd64, arm64v8 33 | Directory: 16/mariadb-tomcat 34 | GitCommit: 432858b827200132c33219374999c43a4a8d6f5b 35 | -------------------------------------------------------------------------------- /library/yourls: -------------------------------------------------------------------------------- 1 | # this file is generated via https://github.com/YOURLS/images/blob/d306b06d6b3e94f1441c65385395f7a384a46101/bin/generate-stackbrew-library.sh 2 | 3 | Maintainers: YOURLS (@YOURLS), 4 | Léo Colombaro (@LeoColomb) 5 | GitRepo: https://github.com/YOURLS/images.git 6 | GitFetch: refs/heads/dist 7 | 8 | Tags: 1.10.1-apache, 1.10-apache, 1-apache, apache, 1.10.1, 1.10, 1, latest 9 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 10 | GitCommit: d306b06d6b3e94f1441c65385395f7a384a46101 11 | Directory: apache 12 | 13 | Tags: 1.10.1-fpm, 1.10-fpm, 1-fpm, fpm 14 | Architectures: amd64, arm32v5, arm32v7, arm64v8, i386, mips64le, ppc64le, s390x 15 | GitCommit: d306b06d6b3e94f1441c65385395f7a384a46101 16 | Directory: fpm 17 | 18 | Tags: 1.10.1-fpm-alpine, 1.10-fpm-alpine, 1-fpm-alpine, fpm-alpine 19 | Architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x 20 | GitCommit: d306b06d6b3e94f1441c65385395f7a384a46101 21 | Directory: fpm-alpine 22 | -------------------------------------------------------------------------------- /library/znc: -------------------------------------------------------------------------------- 1 | Maintainers: Alexey Sokolov (@DarthGandalf) 2 | GitRepo: https://github.com/znc/znc-docker.git 3 | GitCommit: 14890ffcd1006eefbe0e2aeb9ea389b49eb995ce 4 | Architectures: amd64, arm32v6, arm64v8 5 | 6 | Tags: 1.9.1, 1.9, latest 7 | Directory: full 8 | 9 | Tags: 1.9.1-slim, 1.9-slim, slim 10 | Directory: slim 11 | -------------------------------------------------------------------------------- /library/zookeeper: -------------------------------------------------------------------------------- 1 | Maintainers: Elisey Zanko (@31z4) 2 | GitRepo: https://github.com/31z4/zookeeper-docker.git 3 | Architectures: amd64, arm64v8, s390x, ppc64le 4 | 5 | Tags: 3.8.4, 3.8, 3.8.4-jre-17, 3.8-jre-17 6 | GitCommit: ec1050affd761a7886c1f1f5d18165c19d3143e8 7 | Directory: 3.8.4 8 | 9 | Tags: 3.9.3, 3.9, 3.9.3-jre-17, 3.9-jre-17, latest 10 | GitCommit: 268d33caa089426f4f173ba0bac9277919f88dc7 11 | Directory: 3.9.3 12 | -------------------------------------------------------------------------------- /naughty-sharedtags.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | if [ "$#" -eq 0 ]; then 5 | set -- '--all' 6 | fi 7 | 8 | bashbrew cat --format ' 9 | {{- range $e := .Entries -}} 10 | {{- range $t := .SharedTags -}} 11 | {{- "{" -}} 12 | "sharedTag": {{ join ":" $.RepoName $t | json }}, 13 | "tag": {{ join ":" $.RepoName ($e.Tags | first) | json }}, 14 | "arches": {{ $e.Architectures | json }} 15 | {{- "}\n" -}} 16 | {{- end -}} 17 | {{- end -}} 18 | ' "$@" | jq -rn ' 19 | # collect map of "shared tag -> all architectures" (combining shared tags back together, respecting/keeping duplicates, since that is what this is testing for) 20 | reduce inputs as $in ({}; .[$in.sharedTag] |= (. // {} | .arches += $in.arches | .tags += [$in.tag])) 21 | # convert that into a map of "shared tags -> same architecture list" (just to shrink the problem set and make it easier to look at/think about) 22 | | reduce to_entries[] as $in ([]; 23 | (path(first(.[] | select(.value.arches == $in.value.arches))) // [length]) as $i 24 | | .[$i[0]] |= ( 25 | .key |= if . then "\(.), \($in.key)" else $in.key end 26 | | .value //= $in.value 27 | ) 28 | ) 29 | | map( 30 | # filter down to just entries with duplicates (ignoring Windows duplicates, since duplicating them is the primary use case of SharedTags in the first place) 31 | .value.arches |= ( 32 | # TODO we *should* try to further verify that there is only one copy of each underlying Windows version here (not 2x "ltsc2022" for example), but that is a much more difficult query to automate 33 | . - ["windows-amd64"] 34 | # trim the list down to just the duplicates (so the error is more obvious) 35 | | group_by(.) 36 | | map(select(length > 1)) 37 | | flatten 38 | ) 39 | | select(.value.arches | length > 0) 40 | | " - \(.key): (duplicate architectures in SharedTags; \(.value.tags | join(", ")))\([ "", .value.arches[] ] | join("\n - "))" 41 | ) 42 | | join("\n\n") 43 | ' 44 | -------------------------------------------------------------------------------- /pr-urls.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | # 5 | # usage: 6 | # $ ./pr-urls.sh PR-NUMBER 7 | # $ ./pr-urls.sh PR-NUMBER IMAGE1 IMAGE2:TAG1 IMAGE3:TAG2 8 | # 9 | # $ ./pr-urls.sh 12072 10 | # $ ./pr-urls.sh 12072 hello-world:linux 11 | # $ ./pr-urls.sh 12072 | xargs -rt bashbrew build 12 | # $ ./pr-urls.sh 12072 | xargs -rt bashbrew list --uniq 13 | # $ ./pr-urls.sh 12072 | xargs -rt bashbrew list --uniq | xargs -rt ./test/run.sh 14 | # 15 | # (rough replacement for the old "test-pr.sh" script and its associated complexity) 16 | # 17 | 18 | pr="$1" 19 | shift 20 | 21 | patch="$(wget -qO- "https://github.com/docker-library/official-images/pull/$pr.patch")" 22 | 23 | commit="$(grep <<<"$patch" -oE '^From [0-9a-f]+ ' | tail -1 | cut -d' ' -f2)" 24 | 25 | if [ "$#" -eq 0 ]; then 26 | files="$(grep <<<"$patch" -oE '^[+]{3} b/library/.+' | cut -d/ -f3 | sort -u)" 27 | set -- $files 28 | fi 29 | 30 | for file; do 31 | echo "https://github.com/docker-library/official-images/raw/$commit/library/$file" 32 | done 33 | -------------------------------------------------------------------------------- /test/clean.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | docker image ls --digests --no-trunc --format ' 5 | {{- if ne .Tag "" -}} 6 | {{- .Repository -}} : {{- .Tag -}} 7 | {{- else if ne .Digest "" -}} 8 | {{- .Repository -}} @ {{- .Digest -}} 9 | {{- else -}} 10 | {{- .ID -}} 11 | {{- end -}} 12 | ' 'librarytest/*' | xargs -rt docker image rm 13 | -------------------------------------------------------------------------------- /test/retry.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | opts="$(getopt -o 'i:c:t:s:' --long 'image:,cid:,tries:,sleep:' -- "$@")" 6 | eval set -- "$opts" 7 | while true; do 8 | flag=$1 9 | shift 10 | case "$flag" in 11 | --image|-i) image="$1" && shift ;; 12 | --cid|-c) cid="$1" && shift ;; 13 | --tries|-t) tries="$1" && shift ;; 14 | --sleep|-s) sleep="$1" && shift ;; 15 | --) break;; 16 | esac 17 | done 18 | 19 | if [ $# -eq 0 ]; then 20 | echo >&2 'retry.sh requires a command to run' 21 | false 22 | fi 23 | 24 | : ${tries:=10} 25 | : ${sleep:=2} 26 | 27 | while ! eval "$@" &> /dev/null; do 28 | (( tries-- )) 29 | if [ $tries -le 0 ]; then 30 | echo >&2 "${image:-the container} failed to accept connections in a reasonable amount of time!" 31 | [ "$cid" ] && ( set -x && docker logs "$cid" ) >&2 || true 32 | ( set -x && eval "$@" ) >&2 || true # to hopefully get a useful error message 33 | false 34 | fi 35 | if [ "$cid" ] && [ "$(docker inspect -f '{{.State.Running}}' "$cid" 2>/dev/null)" != 'true' ]; then 36 | echo >&2 "${image:-the container} stopped unexpectedly!" 37 | ( set -x && docker logs "$cid" ) >&2 || true 38 | false 39 | fi 40 | echo >&2 -n . 41 | sleep "$sleep" 42 | done 43 | -------------------------------------------------------------------------------- /test/tests/cheeky-retries.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | # intended to be symlinked as "run.sh" next to "real-run.sh" such that we give "real-run.sh" a couple tries to succeed before we give up 5 | 6 | dir="$(dirname "$BASH_SOURCE")" 7 | 8 | tries=3 9 | while [ "$tries" -gt 0 ]; do 10 | (( tries-- )) || : 11 | if "$dir/real-run.sh" "$@"; then 12 | exit 0 13 | fi 14 | if [ "$tries" -gt 0 ]; then 15 | echo >&2 'warning: failed, retrying' 16 | fi 17 | done 18 | 19 | exit 1 20 | -------------------------------------------------------------------------------- /test/tests/composer/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "composer/composer": "^2" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /test/tests/composer/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | dir="$(mktemp -d)" 4 | 5 | trap "rm -rf '$dir'" EXIT 6 | 7 | cp composer.json "$dir" 8 | 9 | cd "$dir" 10 | 11 | composer --version 12 | composer install --no-interaction --no-progress --no-ansi --profile 13 | -------------------------------------------------------------------------------- /test/tests/composer/run.sh: -------------------------------------------------------------------------------- 1 | ../run-sh-in-container.sh -------------------------------------------------------------------------------- /test/tests/convertigo-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | serverImage="$1" 7 | 8 | # Use a client image with curl for testing 9 | clientImage='buildpack-deps:bookworm-curl' 10 | # ensure the clientImage is ready and available 11 | if ! docker image inspect "$clientImage" &> /dev/null; then 12 | docker pull "$clientImage" > /dev/null 13 | fi 14 | 15 | # Create an instance of the container-under-test 16 | cid="$(docker run -d "$serverImage")" 17 | trap "docker rm -vf $cid > /dev/null" EXIT 18 | 19 | _request() { 20 | local url="${1#/}" 21 | shift 22 | 23 | docker run --rm \ 24 | --link "$cid":convertigo \ 25 | "$clientImage" \ 26 | curl -s "$@" "http://convertigo:28080/$url" 27 | } 28 | 29 | # Make sure that Tomcat is listening 30 | . "$dir/../../retry.sh" -s 5 '_request / &> /dev/null' 31 | 32 | # Check that we can request / 33 | [ -n "$(_request '/')" ] 34 | 35 | # Check that the example "Hello World" servlet works 36 | helloWorld="$(_request '/convertigo/admin/services/engine.CheckAuthentication')" 37 | [[ "$helloWorld" == *'TEST_PLATFORM'* ]] 38 | -------------------------------------------------------------------------------- /test/tests/dart-hello-world/container.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | print('Hello World!'); 3 | } 4 | -------------------------------------------------------------------------------- /test/tests/dart-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/dart-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-dart-in-container.sh -------------------------------------------------------------------------------- /test/tests/debian-apt-get/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # We have to eat stderr here because of: 5 | # W: Conflicting distribution: http://http.debian.net rc-buggy InRelease (expected rc-buggy but got experimental) 6 | # W: Conflicting distribution: http://archive.ubuntu.com devel Release (expected devel but got vivid) 7 | # W: Conflicting distribution: http://archive.ubuntu.com devel-updates Release (expected devel-updates but got vivid) 8 | # W: Conflicting distribution: http://archive.ubuntu.com devel-security Release (expected devel-security but got vivid) 9 | apt-get update &> /dev/null 10 | 11 | # We have to eat stderr here because of: 12 | # debconf: delaying package configuration, since apt-utils is not installed 13 | apt-get install -y hello &> /dev/null 14 | 15 | exec hello 16 | -------------------------------------------------------------------------------- /test/tests/debian-apt-get/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello, world! 2 | -------------------------------------------------------------------------------- /test/tests/debian-apt-get/run.sh: -------------------------------------------------------------------------------- 1 | ../run-bash-in-container.sh -------------------------------------------------------------------------------- /test/tests/docker-build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | # wrapper around "docker build" that creates a temporary directory and copies files into it first so that arbitrary host directories can be copied into containers without bind mounts, but accepts a Dockerfile on stdin 5 | 6 | # usage: ./docker-build.sh some-host-directory some-new-image:some-tag < "$tmp/Dockerfile" 25 | 26 | from="$(awk -F '[ \t]+' 'toupper($1) == "FROM" { print $2; exit }' "$tmp/Dockerfile")" 27 | if ! docker inspect "$from" &> /dev/null; then 28 | docker pull "$from" > /dev/null 29 | fi 30 | 31 | cp -RL "$dir" "$tmp/dir" 32 | 33 | error="$(command docker build -t "$imageTag" "$tmp" 2>&1)" || { echo "$error" >&2; exit 1; } 34 | -------------------------------------------------------------------------------- /test/tests/docker-dind/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | cname="docker-daemon-container-$RANDOM-$RANDOM" 9 | cid="$( 10 | docker run -d -it \ 11 | --privileged \ 12 | --name "$cname" \ 13 | -e DOCKER_TLS_CERTDIR=/certs -v /certs \ 14 | "$image" 15 | )" 16 | trap "docker rm -vf $cid > /dev/null" EXIT 17 | 18 | docker_() { 19 | docker run --rm -i \ 20 | --link "$cname":docker \ 21 | -e DOCKER_TLS_CERTDIR=/certs --volumes-from "$cname:ro" \ 22 | --entrypoint docker-entrypoint.sh \ 23 | "$image" \ 24 | "$@" 25 | } 26 | 27 | . "$dir/../../retry.sh" --tries 30 'docker_ version' 28 | 29 | [ "$(docker_ images -q | wc -l)" = '0' ] 30 | docker_ pull busybox 31 | [ "$(docker_ images -q | wc -l)" = '1' ] 32 | 33 | [ "$(docker_ ps -aq | wc -l)" = '0' ] 34 | 35 | docker_ run --rm busybox true 36 | docker_ run --rm busybox true 37 | docker_ run --rm busybox true 38 | 39 | [ "$(docker_ ps -aq | wc -l)" = '0' ] 40 | docker_ create -i --name test1 busybox cat 41 | [ "$(docker_ ps -aq | wc -l)" = '1' ] 42 | 43 | [ "$(docker_ inspect -f '{{.State.Running}}' test1)" = 'false' ] 44 | docker_ start test1 45 | [ "$(docker_ inspect -f '{{.State.Running}}' test1)" = 'true' ] 46 | docker_ stop test1 47 | [ "$(docker_ inspect -f '{{.State.Running}}' test1)" = 'false' ] 48 | docker_ rm test1 49 | 50 | [ "$(docker_ ps -aq | wc -l)" = '0' ] 51 | -------------------------------------------------------------------------------- /test/tests/eclipse-mosquitto-basics/mosquitto.conf: -------------------------------------------------------------------------------- 1 | listener 1883 2 | allow_anonymous true 3 | -------------------------------------------------------------------------------- /test/tests/eclipse-mosquitto-basics/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | # Test basic mosquitto broker and clients operation. 5 | # 6 | # 1. Run the broker. 7 | # 2. Use mosquitto_pub to publish a retained message with a random payload to a 8 | # random topic 9 | # 3. Use mosquitto_sub to subscribe to the random topic, and retrieve the 10 | # payload. 11 | # 12 | # mosquitto_sub times out after two seconds if the message is not delivered. 13 | 14 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 15 | 16 | image="$1" 17 | 18 | # Create an instance of the container-under-test 19 | serverImage="$("$dir/../image-name.sh" librarytest/eclipse-mosquitto-basics "$image")" 20 | "$dir/../docker-build.sh" "$dir" "$serverImage" < /dev/null" EXIT 31 | 32 | _publish() { 33 | local topic="${1}" 34 | shift 35 | 36 | local payload="${1}" 37 | shift 38 | 39 | docker run --rm \ 40 | --link "$cid":eclipse-mosquitto \ 41 | "$serverImage" \ 42 | mosquitto_pub \ 43 | -t $topic \ 44 | -m ${payload} \ 45 | -r \ 46 | -h eclipse-mosquitto 47 | } 48 | 49 | _subscribe() { 50 | local topic="${1}" 51 | shift 52 | 53 | docker run --rm \ 54 | --link "$cid":eclipse-mosquitto \ 55 | "$serverImage" \ 56 | mosquitto_sub \ 57 | -t $topic \ 58 | -C 1 \ 59 | -W 2 \ 60 | -h eclipse-mosquitto 61 | } 62 | 63 | topic="topic-$RANDOM" 64 | payload="$RANDOM" 65 | 66 | . "$dir/../../retry.sh" --tries 20 "_publish $topic $payload" 67 | 68 | response="$(_subscribe $topic)" 69 | [[ "$response" == "$payload" ]] 70 | -------------------------------------------------------------------------------- /test/tests/elixir-hello-world/container.exs: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env elixir 2 | 3 | IO.puts "Hello World!" -------------------------------------------------------------------------------- /test/tests/elixir-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/elixir-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-elixir-in-container.sh -------------------------------------------------------------------------------- /test/tests/erlang-hello-world/container.erl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env escript 2 | 3 | -module('hello-world'). 4 | 5 | main(_) -> 6 | io:format("Hello World!~n"). 7 | -------------------------------------------------------------------------------- /test/tests/erlang-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/erlang-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-erlang-in-container.sh -------------------------------------------------------------------------------- /test/tests/gcc-c-hello-world/container.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main() { 4 | printf("Hello World!\n"); 5 | return 0; 6 | } 7 | -------------------------------------------------------------------------------- /test/tests/gcc-c-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/gcc-c-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-gcc-in-container.sh -------------------------------------------------------------------------------- /test/tests/gcc-cpp-hello-world/container.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main() { 4 | std::cout << "Hello World!\n"; 5 | return 0; 6 | } 7 | -------------------------------------------------------------------------------- /test/tests/gcc-cpp-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/gcc-cpp-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-g++-in-container.sh -------------------------------------------------------------------------------- /test/tests/golang-hello-world/container.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | fmt.Printf("Hello World!\n") 7 | } 8 | -------------------------------------------------------------------------------- /test/tests/golang-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/golang-hello-world/real-run.sh: -------------------------------------------------------------------------------- 1 | ../run-go-in-container.sh -------------------------------------------------------------------------------- /test/tests/golang-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | if [[ "${image##*/}" == gcc:4* ]]; then 9 | echo >&2 'warning: gcc 4.x does not support Go' 10 | cat "$dir/expected-std-out.txt" # cheaters gunna cheat 11 | exit 12 | fi 13 | 14 | exec "$dir/real-run.sh" "$@" 15 | -------------------------------------------------------------------------------- /test/tests/haproxy-basics/haproxy.cfg: -------------------------------------------------------------------------------- 1 | defaults 2 | mode tcp 3 | timeout connect 5000ms 4 | timeout client 50000ms 5 | timeout server 50000ms 6 | frontend http-in 7 | bind *:80 8 | default_backend example 9 | frontend https-in 10 | bind *:443 11 | default_backend example 12 | backend example 13 | server example0 example.com 14 | -------------------------------------------------------------------------------- /test/tests/haproxy-basics/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [ "$DEBUG" ] && set -x 4 | 5 | set -eo pipefail 6 | 7 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 8 | 9 | image="$1" 10 | 11 | clientImage='buildpack-deps:bookworm-curl' 12 | # ensure the clientImage is ready and available 13 | if ! docker image inspect "$clientImage" &> /dev/null; then 14 | docker pull "$clientImage" > /dev/null 15 | fi 16 | 17 | # Create an instance of the container-under-test 18 | serverImage="$("$dir/../image-name.sh" librarytest/haproxy-basics "$image")" 19 | "$dir/../docker-build.sh" "$dir" "$serverImage" < /dev/null" EXIT 25 | 26 | _request() { 27 | local method="$1" 28 | shift 29 | 30 | local proto="$1" 31 | shift 32 | 33 | local url="${1#/}" 34 | shift 35 | 36 | if [ "$(docker inspect -f '{{.State.Running}}' "$cid" 2>/dev/null)" != 'true' ]; then 37 | echo >&2 "$image stopped unexpectedly!" 38 | ( set -x && docker logs "$cid" ) >&2 || true 39 | false 40 | fi 41 | 42 | docker run --rm \ 43 | --link "$cid":haproxy \ 44 | "$clientImage" \ 45 | curl -fsSL -X"$method" --connect-to '::haproxy:' "$@" "$proto://example.com/$url" 46 | } 47 | 48 | . "$dir/../../retry.sh" '[ "$(_request GET / --output /dev/null || echo $?)" != 7 ]' 49 | 50 | # Check that we can request / (which is proxying example.com) 51 | _request GET http '/' | grep '

Example Domain

' > /dev/null 52 | _request GET https '/' | grep '

Example Domain

' > /dev/null 53 | -------------------------------------------------------------------------------- /test/tests/haskell-cabal/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | cabal update 5 | cabal install --lib primitive 6 | -------------------------------------------------------------------------------- /test/tests/haskell-cabal/run.sh: -------------------------------------------------------------------------------- 1 | ../run-bash-in-container.sh -------------------------------------------------------------------------------- /test/tests/haskell-ghci/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # Test that the REPL exists and 'works'. 5 | echo | ghci 6 | -------------------------------------------------------------------------------- /test/tests/haskell-ghci/run.sh: -------------------------------------------------------------------------------- 1 | ../run-bash-in-container.sh -------------------------------------------------------------------------------- /test/tests/haskell-runhaskell/container.hs: -------------------------------------------------------------------------------- 1 | main = putStrLn "Hello, World" 2 | -------------------------------------------------------------------------------- /test/tests/haskell-runhaskell/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello, World 2 | -------------------------------------------------------------------------------- /test/tests/haskell-runhaskell/run.sh: -------------------------------------------------------------------------------- 1 | ../run-haskell-in-container.sh -------------------------------------------------------------------------------- /test/tests/haskell-stack/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # stack mostly sends to stderr 5 | if ! stackResult="$(stack --resolver ghc-$(ghc --print-project-version) new myproject 2>&1 > /dev/null)"; then 6 | case "$stackResult" in 7 | *"Unable to load global hints for"*) 8 | echo >&2 'skipping; stack does not yet support this Haskell version' 9 | exit 0 10 | ;; 11 | *) 12 | echo >&2 'error: stack failed:' 13 | echo >&2 "$stackResult" 14 | exit 1 15 | ;; 16 | esac 17 | fi 18 | 19 | cd myproject 20 | stack run 2> /dev/null 21 | -------------------------------------------------------------------------------- /test/tests/haskell-stack/run.sh: -------------------------------------------------------------------------------- 1 | ../run-bash-in-container.sh -------------------------------------------------------------------------------- /test/tests/haxe-haxelib-install/Container.hx: -------------------------------------------------------------------------------- 1 | class Container { 2 | static function main():Void { 3 | switch (Sys.command("haxelib", ["install", "jQueryExtern"])) { 4 | case 0: //pass 5 | case code: Sys.exit(code); 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/tests/haxe-haxelib-install/run.sh: -------------------------------------------------------------------------------- 1 | ../run-haxe-in-container.sh -------------------------------------------------------------------------------- /test/tests/haxe-hello-world/Container.hx: -------------------------------------------------------------------------------- 1 | class Container { 2 | static function main():Void { 3 | trace("Hello World!"); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /test/tests/haxe-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Container.hx:3: Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/haxe-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-haxe-in-container.sh -------------------------------------------------------------------------------- /test/tests/hylang-hello-world/container.hy: -------------------------------------------------------------------------------- 1 | (print "Hello World!") 2 | -------------------------------------------------------------------------------- /test/tests/hylang-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/hylang-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-hy-in-container.sh -------------------------------------------------------------------------------- /test/tests/hylang-sh/container.hy: -------------------------------------------------------------------------------- 1 | (require hyrule [-> comment]) 2 | 3 | (-> 4 | (+ 2 2) 5 | (print)) 6 | 7 | (import os subprocess sys) 8 | (subprocess.check_call [sys.executable "-m" "pip" "install" "-q" "sh==1.14.2"] 9 | :stdout sys.stderr 10 | :env (dict os.environ 11 | :PIP_DISABLE_PIP_VERSION_CHECK "1" 12 | :PIP_NO_PYTHON_VERSION_WARNING "1" 13 | :PIP_ROOT_USER_ACTION "ignore")) 14 | (comment PIP_DISABLE_PIP_VERSION_CHECK: ensure pip does not complain about a new version being available) 15 | (comment PIP_NO_PYTHON_VERSION_WARNING: or that a new version will no longer work with this python version) 16 | (comment PIP_ROOT_USER_ACTION: ensure pip does not complain about running about root) 17 | 18 | (import platform) 19 | 20 | (comment Windows is not supported by sh (sad day)) 21 | (comment https://github.com/amoffat/sh/blob/608f4c3bf5ad75ad40035d03a9c5ffcce0898f07/sh.py#L33-L36) 22 | (if (= (.system platform) "Windows") 23 | (defn echo [dashn num] (return num)) 24 | (import sh [echo])) 25 | 26 | (-> 27 | (+ 28 | (int (echo "-n" 21)) 29 | (int (echo "-n" 21))) 30 | (print)) 31 | -------------------------------------------------------------------------------- /test/tests/hylang-sh/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | 4 2 | 42 3 | -------------------------------------------------------------------------------- /test/tests/hylang-sh/run.sh: -------------------------------------------------------------------------------- 1 | ../run-hy-in-container.sh -------------------------------------------------------------------------------- /test/tests/image-name.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # usage: ./image-name.sh librarytest/something some/image:some-tag 5 | # output: librarytest/something:some-image-some-tag 6 | 7 | base="$1"; shift 8 | tag="$1"; shift 9 | 10 | echo "$base:$(echo "$tag" | sed 's![:/]!-!g')" 11 | -------------------------------------------------------------------------------- /test/tests/java-ca-certificates/container.java: -------------------------------------------------------------------------------- 1 | import java.net.URL; 2 | 3 | public class container { 4 | public static void main(String[] args) { 5 | try { 6 | new URL("https://google.com").openStream(); // force a CA certificate lookup 7 | System.exit(0); 8 | } 9 | catch (Exception e) { 10 | e.printStackTrace(); 11 | } 12 | System.exit(1); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /test/tests/java-ca-certificates/run.sh: -------------------------------------------------------------------------------- 1 | ../run-java-in-container.sh -------------------------------------------------------------------------------- /test/tests/java-hello-world/container.java: -------------------------------------------------------------------------------- 1 | public class container { 2 | /** 3 | * Simple "hello world" to test the java can compile and/or run 4 | */ 5 | public static void main(String[] args) { 6 | System.out.println("Hello World!"); 7 | System.exit(0); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/tests/java-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/java-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-java-in-container.sh -------------------------------------------------------------------------------- /test/tests/java-uimanager-font/container.java: -------------------------------------------------------------------------------- 1 | import javax.swing.LookAndFeel; 2 | import javax.swing.UIManager; 3 | 4 | public class container { 5 | static int exitVal = 0; 6 | 7 | /** 8 | * Tests the UIManager a bit. Doing this kills a lot of OpenJDK builds. 9 | * 10 | * Note these functions are used in a headless application, a web app. 11 | * The fonts are needed to create PDFs reliably. 12 | * 13 | * If this succeeds, the first line it prints to stdout is Success 14 | * and it returns a return code (exit value) of 0 (zero) 15 | * 16 | * If there's a failure, the first line consists of Failed, and the return code is 1 (one) 17 | */ 18 | public static void main(String[] args) { 19 | 20 | try { 21 | String family = UIManager.getFont("Label.font").getFamily(); 22 | } catch (Throwable t) { 23 | bad("Could not get the default font's family", t); 24 | } 25 | 26 | try { 27 | LookAndFeel look = UIManager.getLookAndFeel(); 28 | } catch (Throwable t) { 29 | bad("Error getting the look and feel class name", t); 30 | } 31 | 32 | try { 33 | LookAndFeel metal = new javax.swing.plaf.metal.MetalLookAndFeel(); 34 | UIManager.setLookAndFeel(metal); 35 | String family = UIManager.getFont("Label.font").getFamily(); 36 | } catch (Throwable t) { 37 | bad("Error making a Metal look/feel, setting it to the UIManager, or getting its font...", t); 38 | } 39 | 40 | System.exit(exitVal); 41 | } 42 | 43 | private static void bad(String msg, Throwable t) { 44 | exitVal = 1; 45 | System.err.println(msg); 46 | t.printStackTrace(System.err); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /test/tests/java-uimanager-font/run.sh: -------------------------------------------------------------------------------- 1 | ../run-java-in-container.sh -------------------------------------------------------------------------------- /test/tests/jetty-hello-web/index.jsp: -------------------------------------------------------------------------------- 1 | <%= request.getParameter("hello") %> 2 | -------------------------------------------------------------------------------- /test/tests/jetty-hello-web/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [ "$DEBUG" ] && set -x 4 | 5 | set -eo pipefail 6 | 7 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 8 | 9 | image="$1" 10 | 11 | # Use a client image with curl for testing 12 | clientImage='buildpack-deps:bookworm-curl' 13 | # ensure the clientImage is ready and available 14 | if ! docker image inspect "$clientImage" &> /dev/null; then 15 | docker pull "$clientImage" > /dev/null 16 | fi 17 | 18 | # Create an instance of the container-under-test 19 | serverImage="$("$dir/../image-name.sh" librarytest/jetty-hello-web "$image")" 20 | "$dir/../docker-build.sh" "$dir" "$serverImage" < /dev/null" EXIT 31 | 32 | _request() { 33 | local method="$1" 34 | shift 35 | 36 | local url="${1#/}" 37 | shift 38 | 39 | docker run --rm \ 40 | --link "$cid":jetty \ 41 | "$clientImage" \ 42 | curl -fs -X"$method" "$@" "http://jetty:8080/$url" 43 | } 44 | 45 | # Make sure that Jetty is listening on port 8080 46 | . "$dir/../../retry.sh" --tries 40 --sleep 0.25 '[ "$(_request GET / --output /dev/null || echo $?)" != 7 ]' 47 | 48 | # Check that we can request /index.jsp with no params 49 | [ "$(_request GET "/" | tail -1)" = "null" ] 50 | 51 | # Check that our index.jsp echoes the value of the "hello" param 52 | hello="world-$RANDOM-$RANDOM" 53 | [ "$(_request GET "/?hello=$hello" | tail -1)" = "$hello" ] 54 | -------------------------------------------------------------------------------- /test/tests/julia-downloads/container.jl: -------------------------------------------------------------------------------- 1 | # https://github.com/docker-library/julia/pull/6 2 | download("https://google.com") 3 | 4 | # https://github.com/docker-library/julia/pull/9 5 | if VERSION.major > 0 || (VERSION.major == 0 && VERSION.minor >= 7) 6 | # https://github.com/docker-library/julia/pull/21 7 | # https://github.com/JuliaLang/julia/tree/v0.7.0-beta2/stdlib/Pkg 8 | using Pkg 9 | end 10 | Pkg.add("JSON") 11 | -------------------------------------------------------------------------------- /test/tests/julia-downloads/run.sh: -------------------------------------------------------------------------------- 1 | ../run-julia-in-container.sh -------------------------------------------------------------------------------- /test/tests/julia-hello-world/container.jl: -------------------------------------------------------------------------------- 1 | println("Hello World!") 2 | -------------------------------------------------------------------------------- /test/tests/julia-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/julia-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-julia-in-container.sh -------------------------------------------------------------------------------- /test/tests/matomo-apache-run/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | # Use a client image with curl for testing 7 | clientImage='buildpack-deps:bookworm-curl' 8 | # ensure the clientImage is ready and available 9 | if ! docker image inspect "$clientImage" &> /dev/null; then 10 | docker pull "$clientImage" > /dev/null 11 | fi 12 | serverImage="$1" 13 | 14 | # Create an instance of the container-under-test 15 | cid="$(docker run -d "$serverImage")" 16 | trap "docker rm -vf $cid > /dev/null" EXIT 17 | 18 | _request() { 19 | local method="$1" 20 | shift 21 | 22 | local url="${1#/}" 23 | shift 24 | 25 | docker run --rm \ 26 | --link "$cid":apache \ 27 | "$clientImage" \ 28 | curl -fsL -X"$method" "$@" "http://apache/$url" 29 | } 30 | 31 | # Make sure that Apache is listening and ready 32 | . "$dir/../../retry.sh" --tries 10 '_request GET / --output /dev/null' 33 | 34 | # Check that we can request / and that it contains the word "installation" somewhere 35 | _request GET '/' | grep -i installation > /dev/null 36 | -------------------------------------------------------------------------------- /test/tests/matomo-fpm-run/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | # Build a client image with cgi-fcgi for testing 9 | clientImage='librarytest/matomo-fpm-run:fcgi-client' 10 | docker build -t "$clientImage" - > /dev/null <<'EOF' 11 | FROM debian:bookworm-slim 12 | 13 | RUN set -x && apt-get update && apt-get install -y --no-install-recommends libfcgi-bin && rm -rf /var/lib/apt/lists/* 14 | 15 | ENTRYPOINT ["cgi-fcgi"] 16 | EOF 17 | 18 | # Create an instance of the container-under-test 19 | cid="$(docker run -d "$image")" 20 | trap "docker rm -vf $cid > /dev/null" EXIT 21 | 22 | fcgi-request() { 23 | local method="$1" 24 | 25 | local url="$2" 26 | local queryString= 27 | if [[ "$url" == *\?* ]]; then 28 | queryString="${url#*\?}" 29 | url="${url%%\?*}" 30 | fi 31 | 32 | docker run --rm -i --link "$cid":fpm \ 33 | -e REQUEST_METHOD="$method" \ 34 | -e SCRIPT_NAME="$url" \ 35 | -e SCRIPT_FILENAME=/var/www/html/"${url#/}" \ 36 | -e QUERY_STRING="$queryString" \ 37 | -e HTTP_HOST='localhost' \ 38 | "$clientImage" \ 39 | -bind -connect fpm:9000 40 | } 41 | 42 | # Make sure that PHP-FPM is listening and ready 43 | . "$dir/../../retry.sh" --tries 10 'fcgi-request GET /index.php' > /dev/null 2>&1 44 | 45 | # check that it contains the word "installation" somewhere 46 | fcgi-request GET '/index.php' | grep -i installation > /dev/null 47 | -------------------------------------------------------------------------------- /test/tests/mongo-auth-basics/run.sh: -------------------------------------------------------------------------------- 1 | ../mongo-basics/run.sh -------------------------------------------------------------------------------- /test/tests/mongo-express-run/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | serverImage="$1" 7 | 8 | clientImage='buildpack-deps:bookworm-curl' 9 | # ensure the clientImage is ready and available 10 | if ! docker image inspect "$clientImage" &> /dev/null; then 11 | docker pull "$clientImage" > /dev/null 12 | fi 13 | 14 | mongoImage='mongo:4.0' 15 | # ensure the mongoImage is ready and available 16 | if ! docker image inspect "$mongoImage" &> /dev/null; then 17 | docker pull "$mongoImage" > /dev/null 18 | fi 19 | 20 | # Create an instance of the container-under-test 21 | mongoCid="$(docker run -d "$mongoImage")" 22 | trap "docker rm -vf $mongoCid > /dev/null" EXIT 23 | cid="$(docker run \ 24 | --detach \ 25 | --link "$mongoCid":mongo \ 26 | --env ME_CONFIG_BASICAUTH_USERNAME="test-user" \ 27 | --env ME_CONFIG_BASICAUTH_PASSWORD="test-password" \ 28 | "$serverImage" 29 | )" 30 | trap "docker rm -vf $cid $mongoCid > /dev/null" EXIT 31 | 32 | _request() { 33 | local method="$1" 34 | shift 35 | 36 | local url="${1#/}" 37 | shift 38 | 39 | docker run --rm --link "$cid":me "$clientImage" \ 40 | curl -fsL -X"$method" "$@" "http://me:8081/$url" 41 | } 42 | 43 | # make sure that mongo-express is listening and ready 44 | . "$dir/../../retry.sh" '_request GET / --output /dev/null --user test-user:test-password' 45 | 46 | # if we evetually got a "200 OK" response from mongo-express, it should be ~working fine! 47 | # (since it fails to even start if it can't connect to MongoDB, etc) 48 | -------------------------------------------------------------------------------- /test/tests/mongo-tls-auth/run.sh: -------------------------------------------------------------------------------- 1 | ../mongo-basics/run.sh -------------------------------------------------------------------------------- /test/tests/mongo-tls-basics/run.sh: -------------------------------------------------------------------------------- 1 | ../mongo-basics/run.sh -------------------------------------------------------------------------------- /test/tests/monica-apache-run/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | dbImage='mysql:8.0' 9 | # ensure the dbImage is ready and available 10 | if ! docker image inspect "$dbImage" &> /dev/null; then 11 | docker pull "$dbImage" > /dev/null 12 | fi 13 | 14 | # Create an instance of the container-under-test 15 | mysqlCid="$(docker run -d \ 16 | -e MYSQL_RANDOM_ROOT_PASSWORD=true \ 17 | -e MYSQL_DATABASE=monica \ 18 | -e MYSQL_USER=monica \ 19 | -e MYSQL_PASSWORD=secret \ 20 | "$dbImage")" 21 | trap "docker rm -vf $mysqlCid > /dev/null" EXIT 22 | 23 | cid="$(docker run -d \ 24 | --link "$mysqlCid":mysql \ 25 | -e DB_HOST=mysql \ 26 | -e DB_CONNECTION=mysql \ 27 | -e DB_DATABASE=monica \ 28 | -e DB_USERNAME=monica \ 29 | -e DB_PASSWORD=secret \ 30 | "$image")" 31 | trap "docker rm -vf $cid $mysqlCid > /dev/null" EXIT 32 | 33 | _request() { 34 | local method="$1" 35 | shift 36 | 37 | local url="${1#/}" 38 | shift 39 | 40 | docker run --rm --link "$cid":apache "$image" \ 41 | curl -fsL -X"$method" "$@" "http://apache/$url" 42 | } 43 | 44 | # Make sure that Apache is listening and ready 45 | . "$dir/../../retry.sh" --tries 30 '_request GET / --output /dev/null' 46 | 47 | # Check that we can request / and that it contains the pattern "Monica" somewhere 48 | _request GET '/' | grep -i "Monica" > /dev/null 49 | -------------------------------------------------------------------------------- /test/tests/monica-cli-mariadb10/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | dbImage='mariadb:10' 9 | # ensure the dbImage is ready and available 10 | if ! docker image inspect "$dbImage" &> /dev/null; then 11 | docker pull "$dbImage" > /dev/null 12 | fi 13 | 14 | # Create an instance of the container-under-test 15 | mysqlCid="$(docker run -d \ 16 | -e MYSQL_RANDOM_ROOT_PASSWORD=true \ 17 | -e MYSQL_DATABASE=monica \ 18 | -e MYSQL_USER=monica \ 19 | -e MYSQL_PASSWORD=secret \ 20 | "$dbImage")" 21 | trap "docker rm -vf $mysqlCid > /dev/null" EXIT 22 | 23 | cid="$(docker run -d \ 24 | --link "$mysqlCid":mysql \ 25 | -e DB_HOST=mysql \ 26 | -e DB_CONNECTION=mysql \ 27 | -e DB_DATABASE=monica \ 28 | -e DB_USERNAME=monica \ 29 | -e DB_PASSWORD=secret \ 30 | "$image")" 31 | trap "docker rm -vf $cid $mysqlCid > /dev/null" EXIT 32 | 33 | _artisan() { 34 | docker exec "$cid" php artisan "$@" 35 | } 36 | 37 | # returns success when all database migrations are finished 38 | _migrate_done() { 39 | local status 40 | status="$(_artisan migrate:status)" 41 | if grep -q ' Ran' <<<"$status" && ! grep -q ' Pending' <<<"$status"; then 42 | return 0 43 | fi 44 | return 1 45 | } 46 | 47 | # check artisan command for specific output; print and error when not found 48 | _artisan_test() { 49 | local match="$1"; shift 50 | output="$(_artisan "$@")" 51 | if ! grep -iq "$match" <<<"$output"; then 52 | echo "Match: '$match' not found in: $output" 53 | return 1 54 | fi 55 | } 56 | 57 | # Give some time to install 58 | . "$dir/../../retry.sh" --tries 30 '_migrate_done' 59 | 60 | # Check if installation is complete 61 | _artisan monica:getversion > /dev/null 62 | . "$dir/../../retry.sh" --tries 5 -- _artisan_test 'No scheduled commands are ready to run.' schedule:run 63 | -------------------------------------------------------------------------------- /test/tests/monica-cli-mysql8/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | dbImage='mysql:8.0' 9 | # ensure the dbImage is ready and available 10 | if ! docker image inspect "$dbImage" &> /dev/null; then 11 | docker pull "$dbImage" > /dev/null 12 | fi 13 | 14 | # Create an instance of the container-under-test 15 | mysqlCid="$(docker run -d \ 16 | -e MYSQL_RANDOM_ROOT_PASSWORD=true \ 17 | -e MYSQL_DATABASE=monica \ 18 | -e MYSQL_USER=monica \ 19 | -e MYSQL_PASSWORD=secret \ 20 | "$dbImage")" 21 | trap "docker rm -vf $mysqlCid > /dev/null" EXIT 22 | 23 | cid="$(docker run -d \ 24 | --link "$mysqlCid":mysql \ 25 | -e DB_HOST=mysql \ 26 | -e DB_CONNECTION=mysql \ 27 | -e DB_DATABASE=monica \ 28 | -e DB_USERNAME=monica \ 29 | -e DB_PASSWORD=secret \ 30 | "$image")" 31 | trap "docker rm -vf $cid $mysqlCid > /dev/null" EXIT 32 | 33 | _artisan() { 34 | docker exec "$cid" php artisan "$@" 35 | } 36 | 37 | # returns success when all database migrations are finished 38 | _migrate_done() { 39 | local status 40 | status="$(_artisan migrate:status)" 41 | if grep -q ' Ran' <<<"$status" && ! grep -q ' Pending' <<<"$status"; then 42 | return 0 43 | fi 44 | return 1 45 | } 46 | 47 | # check artisan command for specific output; print and error when not found 48 | _artisan_test() { 49 | local match="$1"; shift 50 | output="$(_artisan "$@")" 51 | if ! grep -iq "$match" <<<"$output"; then 52 | echo "Match: '$match' not found in: $output" 53 | return 1 54 | fi 55 | } 56 | 57 | # Give some time to install 58 | . "$dir/../../retry.sh" --tries 30 '_migrate_done' 59 | 60 | # Check if installation is complete 61 | _artisan monica:getversion > /dev/null 62 | . "$dir/../../retry.sh" --tries 5 -- _artisan_test 'No scheduled commands are ready to run.' schedule:run 63 | -------------------------------------------------------------------------------- /test/tests/monica-cli/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | dbImage='mysql:5.7' 9 | # ensure the dbImage is ready and available 10 | if ! docker image inspect "$dbImage" &> /dev/null; then 11 | docker pull "$dbImage" > /dev/null 12 | fi 13 | 14 | # Create an instance of the container-under-test 15 | mysqlCid="$(docker run -d \ 16 | -e MYSQL_RANDOM_ROOT_PASSWORD=true \ 17 | -e MYSQL_DATABASE=monica \ 18 | -e MYSQL_USER=monica \ 19 | -e MYSQL_PASSWORD=secret \ 20 | "$dbImage")" 21 | trap "docker rm -vf $mysqlCid > /dev/null" EXIT 22 | 23 | cid="$(docker run -d \ 24 | --link "$mysqlCid":mysql \ 25 | -e DB_HOST=mysql \ 26 | -e DB_CONNECTION=mysql \ 27 | -e DB_DATABASE=monica \ 28 | -e DB_USERNAME=monica \ 29 | -e DB_PASSWORD=secret \ 30 | "$image")" 31 | trap "docker rm -vf $cid $mysqlCid > /dev/null" EXIT 32 | 33 | _artisan() { 34 | docker exec "$cid" php artisan "$@" 35 | } 36 | 37 | # returns success when all database migrations are finished 38 | _migrate_done() { 39 | local status 40 | status="$(_artisan migrate:status)" 41 | if grep -q ' Ran' <<<"$status" && ! grep -q ' Pending' <<<"$status"; then 42 | return 0 43 | fi 44 | return 1 45 | } 46 | 47 | # check artisan command for specific output; print and error when not found 48 | _artisan_test() { 49 | local match="$1"; shift 50 | output="$(_artisan "$@")" 51 | if ! grep -iq "$match" <<<"$output"; then 52 | echo "Match: '$match' not found in: $output" 53 | return 1 54 | fi 55 | } 56 | 57 | # Give some time to install 58 | . "$dir/../../retry.sh" --tries 30 '_migrate_done' 59 | 60 | # Check if installation is complete 61 | _artisan monica:getversion > /dev/null 62 | . "$dir/../../retry.sh" --tries 5 -- _artisan_test 'No scheduled commands are ready to run.' schedule:run 63 | -------------------------------------------------------------------------------- /test/tests/mysql-basics/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | export MYSQL_ROOT_PASSWORD='this is an example test password' 9 | export MYSQL_USER='0123456789012345' # "ERROR: 1470 String 'my cool mysql user' is too long for user name (should be no longer than 16)" 10 | export MYSQL_PASSWORD='my cool mysql password' 11 | export MYSQL_DATABASE='my cool mysql database' 12 | 13 | cname="mysql-container-$RANDOM-$RANDOM" 14 | cid="$( 15 | docker run -d \ 16 | -e MYSQL_ROOT_PASSWORD \ 17 | -e MYSQL_USER \ 18 | -e MYSQL_PASSWORD \ 19 | -e MYSQL_DATABASE \ 20 | --name "$cname" \ 21 | "$image" 22 | )" 23 | trap "docker rm -vf $cid > /dev/null" EXIT 24 | 25 | mysql() { 26 | docker run --rm -i \ 27 | --link "$cname":mysql \ 28 | --entrypoint sh \ 29 | -e MYSQL_PWD="$MYSQL_PASSWORD" \ 30 | "$image" \ 31 | -euc 'if command -v mariadb > /dev/null; then exec mariadb "$@"; else exec mysql "$@"; fi' -- \ 32 | -hmysql \ 33 | -u"$MYSQL_USER" \ 34 | --silent \ 35 | "$@" \ 36 | "$MYSQL_DATABASE" 37 | } 38 | 39 | . "$dir/../../retry.sh" --tries 30 "mysql -e 'SELECT 1'" 40 | 41 | echo 'CREATE TABLE test (a INT, b INT, c VARCHAR(255))' | mysql 42 | [ "$(echo 'SELECT COUNT(*) FROM test' | mysql)" = 0 ] 43 | echo 'INSERT INTO test VALUES (1, 2, "hello")' | mysql 44 | [ "$(echo 'SELECT COUNT(*) FROM test' | mysql)" = 1 ] 45 | echo 'INSERT INTO test VALUES (2, 3, "goodbye!")' | mysql 46 | [ "$(echo 'SELECT COUNT(*) FROM test' | mysql)" = 2 ] 47 | echo 'DELETE FROM test WHERE a = 1' | mysql 48 | [ "$(echo 'SELECT COUNT(*) FROM test' | mysql)" = 1 ] 49 | [ "$(echo 'SELECT c FROM test' | mysql)" = 'goodbye!' ] 50 | echo 'DROP TABLE test' | mysql 51 | -------------------------------------------------------------------------------- /test/tests/mysql-initdb/initdb.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE test (a INT, b INT, c VARCHAR(255)); 2 | INSERT INTO test VALUES (1, 2, 'hello'); 3 | INSERT INTO test VALUES (2, 3, 'goodbye!'); 4 | DELETE FROM test WHERE a = 1; 5 | -------------------------------------------------------------------------------- /test/tests/mysql-initdb/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | serverImage="$("$dir/../image-name.sh" librarytest/mysql-initdb "$image")" 9 | "$dir/../docker-build.sh" "$dir" "$serverImage" < /dev/null" EXIT 30 | 31 | mysql() { 32 | docker run --rm -i \ 33 | --link "$cname":mysql \ 34 | --entrypoint sh \ 35 | -e MYSQL_PWD="$MYSQL_PASSWORD" \ 36 | "$image" \ 37 | -euc 'if command -v mariadb > /dev/null; then exec mariadb "$@"; else exec mysql "$@"; fi' -- \ 38 | -hmysql \ 39 | -u"$MYSQL_USER" \ 40 | --silent \ 41 | "$@" \ 42 | "$MYSQL_DATABASE" 43 | } 44 | 45 | . "$dir/../../retry.sh" --tries 30 "echo 'SELECT 1' | mysql" 46 | 47 | [ "$(echo 'SELECT COUNT(*) FROM test' | mysql)" = 1 ] 48 | [ "$(echo 'SELECT c FROM test' | mysql)" = 'goodbye!' ] 49 | -------------------------------------------------------------------------------- /test/tests/mysql-log-bin/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | cname="mysql-container-$RANDOM-$RANDOM" 9 | rootpass="secret$RANDOM-$RANDOM" 10 | cid="$( 11 | docker run -d \ 12 | -e MYSQL_ROOT_PASSWORD="$rootpass" \ 13 | --name "$cname" \ 14 | "$image" \ 15 | --log-bin="foo-$RANDOM" \ 16 | --server-id="$RANDOM" 17 | )" 18 | trap "docker rm -vf $cid > /dev/null" EXIT 19 | 20 | mysql() { 21 | docker run --rm -i \ 22 | --link "$cname":mysql \ 23 | --entrypoint sh \ 24 | "$image" \ 25 | -euc 'if command -v mariadb > /dev/null; then exec mariadb "$@"; else exec mysql "$@"; fi' -- \ 26 | -uroot \ 27 | -p"$rootpass" \ 28 | -hmysql \ 29 | --silent \ 30 | "$@" 31 | } 32 | 33 | . "$dir/../../retry.sh" --tries 30 "echo 'SELECT 1' | mysql" 34 | 35 | # yay, must be OK 36 | -------------------------------------------------------------------------------- /test/tests/nextcloud-apache-run/real-run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -Eeo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | serverImage="$1" 7 | 8 | # Use a client image with curl for testing 9 | clientImage='buildpack-deps:buster-curl' 10 | # ensure the clientImage is ready and available 11 | if ! docker image inspect "$clientImage" &> /dev/null; then 12 | docker pull "$clientImage" > /dev/null 13 | fi 14 | 15 | # Create an instance of the container-under-test 16 | cid="$(docker run -d "$serverImage")" 17 | trap "docker rm -vf $cid > /dev/null" EXIT 18 | #trap "docker logs $cid" ERR 19 | 20 | _request() { 21 | local method="$1" 22 | shift 23 | 24 | local url="${1#/}" 25 | shift 26 | 27 | docker run --rm \ 28 | --link "$cid":apache \ 29 | "$clientImage" \ 30 | curl -fsL -X"$method" "$@" "http://apache/$url" 31 | } 32 | 33 | # Make sure that Apache is listening and ready 34 | . "$dir/../../retry.sh" --tries 10 --sleep 5 '_request GET / --output /dev/null' 35 | 36 | # Check that we can request / and that it contains the pattern "Install" somewhere 37 | # 38 | _request GET '/' | grep -i '"Install"' > /dev/null 39 | # (https://github.com/nextcloud/server/blob/68b2463107774bed28ee9e77b44e7395d49dacee/core/templates/installation.php#L164) 40 | -------------------------------------------------------------------------------- /test/tests/nextcloud-apache-run/run.sh: -------------------------------------------------------------------------------- 1 | ../cheeky-retries.sh -------------------------------------------------------------------------------- /test/tests/nextcloud-cli-mysql/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | dbImage='mariadb:10.11' 7 | # ensure the dbImage is ready and available 8 | if ! docker image inspect "$dbImage" &> /dev/null; then 9 | docker pull "$dbImage" > /dev/null 10 | fi 11 | serverImage="$1" 12 | dbPass="test-$RANDOM-password-$RANDOM-$$" 13 | dbName="test-$RANDOM-db" 14 | dbUsr="test-$RANDOM-db" 15 | 16 | # Create an instance of the container-under-test 17 | dbCid="$(docker run -d \ 18 | -e MYSQL_RANDOM_ROOT_PASSWORD=yes \ 19 | -e MYSQL_USER="$dbUsr" \ 20 | -e MYSQL_PASSWORD="$dbPass" \ 21 | -e MYSQL_DATABASE="$dbName" \ 22 | "$dbImage")" 23 | trap "docker rm -vf $dbCid > /dev/null" EXIT 24 | cid="$(docker run -d \ 25 | --link "$dbCid":db \ 26 | -e MYSQL_HOST="db" \ 27 | -e MYSQL_USER="$dbUsr" \ 28 | -e MYSQL_PASSWORD="$dbPass" \ 29 | -e MYSQL_DATABASE="$dbName" \ 30 | -e NEXTCLOUD_ADMIN_USER="test-$RANDOM-user" \ 31 | -e NEXTCLOUD_ADMIN_PASSWORD="test-$RANDOM-password" \ 32 | "$serverImage")" 33 | trap "docker rm -vf $cid $dbCid > /dev/null" EXIT 34 | 35 | _occ() { 36 | docker exec -u www-data "$cid" php occ "$@" 37 | } 38 | 39 | # Give some time to install 40 | . "$dir/../../retry.sh" --tries 10 --sleep 5 '_occ app:list' > /dev/null 41 | 42 | # Check if NextCloud is installed 43 | _occ status | grep -iq 'installed: true' 44 | _occ check 45 | -------------------------------------------------------------------------------- /test/tests/nextcloud-cli-postgres/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | dbImage='postgres:13-alpine' 7 | # ensure the dbImage is ready and available 8 | if ! docker image inspect "$dbImage" &> /dev/null; then 9 | docker pull "$dbImage" > /dev/null 10 | fi 11 | serverImage="$1" 12 | dbPass="test-$RANDOM-password-$RANDOM-$$" 13 | dbName="test_${RANDOM}_db" # dbName has to be set to something that does not require escaping: https://github.com/docker-library/official-images/pull/6252#issuecomment-520095703 14 | dbUsr="test-$RANDOM-db" 15 | 16 | # Create an instance of the container-under-test 17 | # not setting POSTGRES_DB due to https://github.com/nextcloud/docker/issues/345 18 | dbCid="$(docker run -d \ 19 | -e POSTGRES_USER="$dbUsr" \ 20 | -e POSTGRES_PASSWORD="$dbPass" \ 21 | -e POSTGRES_DB="$dbName" \ 22 | "$dbImage")" 23 | trap "docker rm -vf $dbCid > /dev/null" EXIT 24 | # NEXTCLOUD_ADMIN_USER has to be set to something that does not require escaping: https://github.com/docker-library/official-images/pull/6252#issuecomment-520095703 25 | cid="$(docker run -d \ 26 | --link "$dbCid":db \ 27 | -e POSTGRES_HOST='db' \ 28 | -e POSTGRES_USER="$dbUsr" \ 29 | -e POSTGRES_PASSWORD="$dbPass" \ 30 | -e POSTGRES_DB="$dbName" \ 31 | -e NEXTCLOUD_ADMIN_USER="test_$RANDOM" \ 32 | -e NEXTCLOUD_ADMIN_PASSWORD="test-$RANDOM-password" \ 33 | "$serverImage")" 34 | trap "docker rm -vf $cid $dbCid > /dev/null" EXIT 35 | 36 | _occ() { 37 | docker exec -u www-data "$cid" php occ "$@" 38 | } 39 | 40 | # Give some time to install 41 | . "$dir/../../retry.sh" --tries 10 --sleep 5 '_occ app:list' > /dev/null 42 | 43 | # Check if NextCloud is installed 44 | _occ status | grep -iq 'installed: true' 45 | _occ check 46 | -------------------------------------------------------------------------------- /test/tests/nextcloud-cli-sqlite/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | serverImage="$1" 7 | dbName="test-$RANDOM-db" 8 | 9 | # Create an instance of the container-under-test 10 | cid="$(docker run -d \ 11 | -e SQLITE_DATABASE="$dbName" \ 12 | -e NEXTCLOUD_ADMIN_USER="test-$RANDOM-user" \ 13 | -e NEXTCLOUD_ADMIN_PASSWORD="test-$RANDOM-password" \ 14 | "$serverImage")" 15 | trap "docker rm -vf $cid > /dev/null" EXIT 16 | 17 | _occ() { 18 | docker exec -u www-data "$cid" php occ "$@" 19 | } 20 | 21 | # Give some time to install 22 | . "$dir/../../retry.sh" --tries 10 --sleep 5 '_occ app:list' > /dev/null 23 | 24 | # Check if NextCloud is installed 25 | _occ status | grep -iq 'installed: true' 26 | _occ check 27 | -------------------------------------------------------------------------------- /test/tests/nextcloud-cli/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | # the nextcloud tests are very flaky, so the intent of this test is to make sure at least *one* of them is succeeding 5 | 6 | dir="$(dirname "$BASH_SOURCE")" 7 | tests="$(dirname "$dir")" 8 | 9 | ret=1 10 | for t in \ 11 | nextcloud-cli-mysql \ 12 | nextcloud-cli-postgres \ 13 | nextcloud-cli-sqlite \ 14 | ; do 15 | if "$tests/$t/run.sh" "$@"; then 16 | ret=0 17 | else 18 | echo >&2 "note: '$t' failed (only fatal if all three do)" 19 | fi 20 | done 21 | 22 | exit "$ret" 23 | -------------------------------------------------------------------------------- /test/tests/nextcloud-fpm-run/real-run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -Eeo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | # Build a client image with cgi-fcgi for testing 9 | clientImage='librarytest/nextcloud-fpm-run:fcgi-client' 10 | docker build -t "$clientImage" - > /dev/null <<'EOF' 11 | FROM debian:bookworm-slim 12 | 13 | RUN set -x && apt-get update && apt-get install -y --no-install-recommends libfcgi-bin && rm -rf /var/lib/apt/lists/* 14 | 15 | ENTRYPOINT ["cgi-fcgi"] 16 | EOF 17 | 18 | # Create an instance of the container-under-test 19 | cid="$(docker run -d "$image")" 20 | trap "docker rm -vf $cid > /dev/null" EXIT 21 | #trap "docker logs $cid" ERR 22 | 23 | fcgi-request() { 24 | local method="$1" 25 | 26 | local url="$2" 27 | local queryString= 28 | if [[ "$url" == *\?* ]]; then 29 | queryString="${url#*\?}" 30 | url="${url%%\?*}" 31 | fi 32 | 33 | docker run --rm -i \ 34 | --link "$cid":fpm \ 35 | -e REQUEST_METHOD="$method" \ 36 | -e SCRIPT_NAME="$url" \ 37 | -e SCRIPT_FILENAME=/var/www/html/"${url#/}" \ 38 | -e QUERY_STRING="$queryString" \ 39 | "$clientImage" \ 40 | -bind -connect fpm:9000 41 | } 42 | 43 | # Make sure that PHP-FPM is listening and ready 44 | . "$dir/../../retry.sh" --tries 10 --sleep 5 'fcgi-request GET /index.php' > /dev/null 2>&1 45 | 46 | # Check that we can request / and that it contains the pattern "Install" somewhere 47 | # 48 | fcgi-request GET '/index.php' | grep -i '"Install"' > /dev/null 49 | # (https://github.com/nextcloud/server/blob/68b2463107774bed28ee9e77b44e7395d49dacee/core/templates/installation.php#L164) 50 | -------------------------------------------------------------------------------- /test/tests/nextcloud-fpm-run/run.sh: -------------------------------------------------------------------------------- 1 | ../cheeky-retries.sh -------------------------------------------------------------------------------- /test/tests/node-hello-world/container.js: -------------------------------------------------------------------------------- 1 | console.log("Hello World!"); 2 | -------------------------------------------------------------------------------- /test/tests/node-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/node-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-node-in-container.sh -------------------------------------------------------------------------------- /test/tests/nuxeo-basics/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | NUXEO_TEST_SLEEP=5 9 | NUXEO_TEST_TRIES=10 10 | 11 | cname="nuxeo-container-$RANDOM-$RANDOM" 12 | cid="$(docker run -d --name "$cname" "$image")" 13 | trap "docker rm -vf $cid > /dev/null" EXIT 14 | 15 | get() { 16 | docker run --rm -i \ 17 | --link "$cname":nuxeo \ 18 | --entrypoint curl \ 19 | "$image" \ 20 | -fs \ 21 | -H "Content-Type:application/json" \ 22 | -u Administrator:Administrator \ 23 | "http://nuxeo:8080/nuxeo/api/v1/$1" 24 | } 25 | 26 | python() { 27 | docker run --rm -i \ 28 | --entrypoint python \ 29 | "$image" \ 30 | "$@" 31 | } 32 | 33 | PATH1='default-domain/workspaces' 34 | 35 | . "$dir/../../retry.sh" \ 36 | --tries "$NUXEO_TEST_TRIES" \ 37 | --sleep "$NUXEO_TEST_SLEEP" \ 38 | "get 'path/$PATH1'" 39 | 40 | # First get a document by its path to get its id 41 | DUID="$(get "path/$PATH1" | python -c 'import json, sys; obj = json.load(sys.stdin); print(obj["uid"]);')" 42 | 43 | # Then get the same document by its id 44 | PATH2="$(get "id/$DUID" | python -c 'import json, sys; obj = json.load(sys.stdin); print(obj["path"]);')" 45 | 46 | # Compare both path 47 | [ "/$PATH1" = "$PATH2" ] 48 | -------------------------------------------------------------------------------- /test/tests/nuxeo-conf/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | org.nuxeo.automation.trace=true 2 | org.nuxeo.dev=true 3 | -------------------------------------------------------------------------------- /test/tests/nuxeo-conf/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | image="$1" 5 | 6 | export NUXEO_DEV_MODE='true' 7 | export NUXEO_AUTOMATION_TRACE='true' 8 | 9 | # not using '--entrypoint nuxeoctl', since regular entrypoint does setup for nuxeoctl 10 | docker run --rm -i \ 11 | -e NUXEO_DEV_MODE \ 12 | -e NUXEO_AUTOMATION_TRACE \ 13 | "$image" \ 14 | nuxeoctl showconf | grep "^org.nuxeo.[automation|dev]" | sort 15 | -------------------------------------------------------------------------------- /test/tests/open-liberty-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | # Use a client image with curl for testing 9 | clientImage='buildpack-deps:bookworm-curl' 10 | # ensure the clientImage is ready and available 11 | if ! docker image inspect "$clientImage" &> /dev/null; then 12 | docker pull "$clientImage" > /dev/null 13 | fi 14 | 15 | serverImage="$1" 16 | 17 | # Create an instance of the container-under-test 18 | cid="$(docker run -d "$serverImage")" 19 | trap "docker rm -vf $cid > /dev/null" EXIT 20 | 21 | _request() { 22 | local url="${1#/}" 23 | shift 24 | 25 | docker run --rm \ 26 | --link "$cid":open-liberty \ 27 | "$clientImage" \ 28 | curl -fsSL "$@" "http://open-liberty:9080/$url" 29 | } 30 | 31 | # Make sure that Open Liberty is listening 32 | . "$dir/../../retry.sh" '_request / &> /dev/null' 33 | 34 | # Check that we can request / 35 | [ -n "$(_request '/')" ] 36 | 37 | # Check that the version.js file can be retrieved. 38 | helloWorld="$(_request '/version.js')" 39 | [[ "$helloWorld" == *'var current'* ]] 40 | -------------------------------------------------------------------------------- /test/tests/override-cmd/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | image="$1" 5 | 6 | # test that we can override the CMD with echo 7 | # https://github.com/docker-library/official-images/blob/d28cb89e79417cac50c2a8ae163a9b3b79167f79/README.md#consistency 8 | 9 | hello="world-$RANDOM-$RANDOM" 10 | 11 | cmd=( echo "Hello $hello" ) 12 | case "$image" in 13 | *windowsservercore* | *nanoserver*) 14 | cmd=( cmd /Q /S /C "${cmd[*]}" ) 15 | ;; 16 | esac 17 | 18 | # test first with --entrypoint to verify that we even have echo (tests for single-binary images FROM scratch, essentially) 19 | if ! testOutput="$(docker run --rm --entrypoint "${cmd[0]}" "$image" "${cmd[@]:1}" 2>/dev/null)"; then 20 | echo >&2 'image does not appear to contain "echo" -- assuming single-binary image' 21 | exit 22 | fi 23 | testOutput="$(tr -d '\r' <<<"$testOutput")" # Windows gives us \r\n ... :D 24 | [ "$testOutput" = "Hello $hello" ] 25 | 26 | # now test with normal command to verify the default entrypoint is OK 27 | output="$(docker run --rm "$image" "${cmd[@]}")" 28 | output="$(tr -d '\r' <<<"$output")" # Windows gives us \r\n ... :D 29 | [ "$output" = "Hello $hello" ] 30 | -------------------------------------------------------------------------------- /test/tests/percona-rocksdb/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | export MYSQL_ROOT_PASSWORD='this is an example test password' 9 | export MYSQL_USER='0123456789012345' # "ERROR: 1470 String 'my cool mysql user' is too long for user name (should be no longer than 16)" 10 | export MYSQL_PASSWORD='my cool mysql password' 11 | export MYSQL_DATABASE='my cool mysql database' 12 | VERSION=$(docker run --rm "$image" --version | awk '{print$3}') 13 | 14 | if [[ $VERSION =~ ^5.[56] ]]; then 15 | echo [skipped] no RocksDB support in 5.5, 5.6 16 | exit 0 17 | fi 18 | 19 | cname="mysql-container-$RANDOM-$RANDOM" 20 | cid="$( 21 | docker run -d \ 22 | -e INIT_ROCKSDB=1 \ 23 | -e MYSQL_ROOT_PASSWORD \ 24 | -e MYSQL_USER \ 25 | -e MYSQL_PASSWORD \ 26 | -e MYSQL_DATABASE \ 27 | --name "$cname" \ 28 | "$image" 29 | )" 30 | trap "docker rm -vf $cid > /dev/null" EXIT 31 | 32 | mysql() { 33 | docker run --rm -i \ 34 | --link "$cname":mysql \ 35 | --entrypoint mysql \ 36 | -e MYSQL_PWD="$MYSQL_PASSWORD" \ 37 | "$image" \ 38 | -hmysql \ 39 | -u"$MYSQL_USER" \ 40 | --silent \ 41 | "$@" \ 42 | "$MYSQL_DATABASE" 43 | } 44 | 45 | . "$dir/../../retry.sh" --tries 20 "echo 'SELECT 1' | mysql" 46 | 47 | echo 'CREATE TABLE test (a INT, b INT, c VARCHAR(255)) ENGINE=RocksDB' | mysql 48 | [ "$(echo 'SELECT COUNT(*) FROM test' | mysql)" = 0 ] 49 | -------------------------------------------------------------------------------- /test/tests/perl-cpanm/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eux 3 | 4 | cpanm --notest Mojolicious 5 | -------------------------------------------------------------------------------- /test/tests/perl-cpanm/run.sh: -------------------------------------------------------------------------------- 1 | ../run-sh-in-container.sh -------------------------------------------------------------------------------- /test/tests/perl-hello-world/container.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | print "Hello World!\n"; 3 | -------------------------------------------------------------------------------- /test/tests/perl-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/perl-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-perl-in-container.sh -------------------------------------------------------------------------------- /test/tests/php-apache-hello-web/index.php: -------------------------------------------------------------------------------- 1 | ../php-fpm-hello-web/index.php -------------------------------------------------------------------------------- /test/tests/php-apache-hello-web/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | # Use a client image with curl for testing 9 | clientImage='buildpack-deps:bookworm-curl' 10 | # ensure the clientImage is ready and available 11 | if ! docker image inspect "$clientImage" &> /dev/null; then 12 | docker pull "$clientImage" > /dev/null 13 | fi 14 | 15 | serverImage="$("$dir/../image-name.sh" librarytest/php-apache-hello-web "$image")" 16 | "$dir/../docker-build.sh" "$dir" "$serverImage" < /dev/null" EXIT 24 | 25 | _request() { 26 | local method="$1" 27 | shift 28 | 29 | local url="${1#/}" 30 | shift 31 | 32 | docker run --rm \ 33 | --link "$cid":apache \ 34 | "$clientImage" \ 35 | curl -fs -X"$method" "$@" "http://apache/$url" 36 | } 37 | 38 | # Make sure that Apache is listening 39 | . "$dir/../../retry.sh" '[ "$(_request GET / --output /dev/null || echo $?)" != 7 ]' 40 | 41 | # Check that we can request /index.php with no params 42 | [ -n "$(_request GET "/index.php")" ] 43 | 44 | # Check that our index.php echoes the value of the "hello" param 45 | hello="world-$RANDOM-$RANDOM" 46 | [ "$(_request GET "/index.php?hello=$hello" | tail -1)" = "$hello" ] 47 | -------------------------------------------------------------------------------- /test/tests/php-argon2/container.php: -------------------------------------------------------------------------------- 1 | 1<<3, 'time_cost' => 1, 'threads' => 1])); 31 | if (!password_verify('password', '$argon2i$v=19$m=8,t=1,p=1$RWxaRlZ0d1FTa3RSY1c1OQ$c7a/rJlPgvH9ItPi74UGuh0tdCBhpdDF7b/nA3QweX8')) { 32 | echo "FAIL: Failed to check test vector.\n"; 33 | exit(1); 34 | } 35 | exit(0); 36 | -------------------------------------------------------------------------------- /test/tests/php-argon2/run.sh: -------------------------------------------------------------------------------- 1 | ../run-php-in-container.sh -------------------------------------------------------------------------------- /test/tests/php-ext-install/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | docker-php-ext-install pdo_mysql 2>&1 5 | php -d display_errors=stderr -r 'exit(extension_loaded("pdo_mysql") ? 0 : 1);' 6 | grep -q '^extension=' /usr/local/etc/php/conf.d/*pdo_mysql*.ini 7 | 8 | # opcache is pre-built by default at least as far back as PHP 5.5 9 | docker-php-ext-enable opcache 2>&1 10 | php -d display_errors=stderr -r 'exit(extension_loaded("Zend OPcache") ? 0 : 1);' 11 | grep -q '^zend_extension=' /usr/local/etc/php/conf.d/*opcache*.ini 12 | -------------------------------------------------------------------------------- /test/tests/php-ext-install/run.sh: -------------------------------------------------------------------------------- 1 | ../run-sh-in-container.sh -------------------------------------------------------------------------------- /test/tests/php-fpm-hello-web/index.php: -------------------------------------------------------------------------------- 1 | /dev/null <<'EOF' 11 | FROM debian:bookworm-slim 12 | 13 | RUN set -x && apt-get update && apt-get install -y --no-install-recommends libfcgi-bin && rm -rf /var/lib/apt/lists/* 14 | 15 | ENTRYPOINT ["cgi-fcgi"] 16 | EOF 17 | 18 | serverImage="$("$dir/../image-name.sh" librarytest/php-fpm-hello-web "$image")" 19 | "$dir/../docker-build.sh" "$dir" "$serverImage" < /dev/null" EXIT 27 | 28 | fcgi-request() { 29 | local method="$1" 30 | 31 | local url="$2" 32 | local queryString= 33 | if [[ "$url" == *\?* ]]; then 34 | queryString="${url#*\?}" 35 | url="${url%%\?*}" 36 | fi 37 | 38 | docker run --rm -i --link "$cid":fpm \ 39 | -e REQUEST_METHOD="$method" \ 40 | -e SCRIPT_NAME="$url" \ 41 | -e SCRIPT_FILENAME=/var/www/html/"${url#/}" \ 42 | -e QUERY_STRING="$queryString" \ 43 | "$clientImage" \ 44 | -bind -connect fpm:9000 45 | } 46 | 47 | # wait until ready 48 | . "$dir/../../retry.sh" --tries 30 'fcgi-request GET /index.php' > /dev/null 2>&1 49 | 50 | # Check that we can request /index.php with no params 51 | [ -n "$(fcgi-request GET "/index.php")" ] 52 | 53 | # Check that our index.php echoes the value of the "hello" param 54 | hello="world-$RANDOM-$RANDOM" 55 | [ "$(fcgi-request GET "/index.php?hello=$hello" | tail -1)" = "$hello" ] 56 | -------------------------------------------------------------------------------- /test/tests/php-hello-world/container.php: -------------------------------------------------------------------------------- 1 | /dev/null" EXIT 14 | 15 | get() { 16 | docker run --rm -i \ 17 | --link "$cname":plone \ 18 | --entrypoint /plone/instance/bin/zopepy \ 19 | "$image" \ 20 | -c "from six.moves.urllib.request import urlopen; con = urlopen('$1'); print(con.read())" 21 | } 22 | 23 | get_auth() { 24 | docker run --rm -i \ 25 | --link "$cname":plone \ 26 | --entrypoint /plone/instance/bin/zopepy \ 27 | "$image" \ 28 | -c "from six.moves.urllib.request import urlopen, Request; request = Request('$1'); request.add_header('Authorization', 'Basic $2'); print(urlopen(request).read())" 29 | } 30 | 31 | 32 | . "$dir/../../retry.sh" --tries "$PLONE_TEST_TRIES" --sleep "$PLONE_TEST_SLEEP" get "http://plone:8080" 33 | 34 | # Plone is up and running 35 | [[ "$(get 'http://plone:8080')" == *"Plone is up and running"* ]] 36 | 37 | # Create a Plone site 38 | [[ "$(get_auth 'http://plone:8080/@@plone-addsite' "$(echo -n 'admin:admin' | base64)")" == *"Create a Plone site"* ]] -------------------------------------------------------------------------------- /test/tests/plone-cors/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | 3 | 6 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/tests/plone-cors/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | # not using '--entrypoint', since regular entrypoint sets up config 5 | docker run -i --rm \ 6 | -e CORS_ALLOW_ORIGIN="http://example.com:4300,http://example.com:5300" \ 7 | -e CORS_ALLOW_METHODS="DELETE,PUT" \ 8 | -e CORS_ALLOW_CREDENTIALS=false \ 9 | -e CORS_EXPOSE_HEADERS="X-Example-Header" \ 10 | -e CORS_ALLOW_HEADERS="X-Example-Header,X-Z-Header" \ 11 | -e CORS_MAX_AGE=600 \ 12 | -v /plone/instance/bin/develop \ 13 | "$1" cat parts/instance/etc/package-includes/999-additional-overrides.zcml 14 | -------------------------------------------------------------------------------- /test/tests/plone-versions/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | 2 | [buildout] 3 | extends = develop.cfg 4 | find-links += 5 | develop += src/eea.facetednavigation 6 | eggs += eea.facetednavigation 7 | zcml += eea.facetednavigation-meta 8 | 9 | [plonesite] 10 | enabled = True 11 | site-id = plone 12 | profiles += eea.facetednavigation:universal 13 | 14 | [versions] 15 | eea.facetednavigation=13.3 16 | plone.restapi=5.0.0 17 | -------------------------------------------------------------------------------- /test/tests/plone-versions/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | # not using '--entrypoint', since regular entrypoint sets up config 5 | docker run -i --rm \ 6 | -e PLONE_DEVELOP=src/eea.facetednavigation \ 7 | -e PLONE_ADDONS=eea.facetednavigation \ 8 | -e PLONE_ZCML=eea.facetednavigation-meta \ 9 | -e PLONE_VERSIONS="eea.facetednavigation=13.3 plone.restapi=5.0.0" \ 10 | -e PLONE_SITE="plone" \ 11 | -e PLONE_PROFILES="eea.facetednavigation:universal" \ 12 | -v /plone/instance/bin/develop \ 13 | "$1" cat custom.cfg 14 | -------------------------------------------------------------------------------- /test/tests/plone-zeoclient/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | PLONE_TEST_SLEEP=3 9 | PLONE_TEST_TRIES=5 10 | 11 | # Start ZEO server 12 | zname="zeo-container-$RANDOM-$RANDOM" 13 | zid="$(docker run -d --name "$zname" "$image" zeo)" 14 | 15 | # Start Plone as ZEO Client 16 | pname="plone-container-$RANDOM-$RANDOM" 17 | pid="$(docker run -d --name "$pname" --link=$zname:zeo -e ZEO_ADDRESS=zeo:8080 "$image")" 18 | 19 | # Tear down 20 | trap "docker rm -vf $pid $zid > /dev/null" EXIT 21 | 22 | get() { 23 | docker run --rm -i \ 24 | --link "$pname":plone \ 25 | --entrypoint /plone/instance/bin/zopepy \ 26 | "$image" \ 27 | -c "from six.moves.urllib.request import urlopen; con = urlopen('$1'); print(con.read())" 28 | } 29 | 30 | get_auth() { 31 | docker run --rm -i \ 32 | --link "$pname":plone \ 33 | --entrypoint /plone/instance/bin/zopepy \ 34 | "$image" \ 35 | -c "from six.moves.urllib.request import urlopen, Request; request = Request('$1'); request.add_header('Authorization', 'Basic $2'); print(urlopen(request).read())" 36 | } 37 | 38 | . "$dir/../../retry.sh" --tries "$PLONE_TEST_TRIES" --sleep "$PLONE_TEST_SLEEP" get "http://plone:8080" 39 | 40 | # Plone is up and running 41 | [[ "$(get 'http://plone:8080')" == *"Plone is up and running"* ]] 42 | 43 | # Create a Plone site 44 | [[ "$(get_auth 'http://plone:8080/@@plone-addsite' "$(echo -n 'admin:admin' | base64)")" == *"Create a Plone site"* ]] 45 | -------------------------------------------------------------------------------- /test/tests/plone-zeosite/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | 2 | [buildout] 3 | extends = develop.cfg 4 | find-links += 5 | develop += src/eea.facetednavigation 6 | eggs += eea.facetednavigation 7 | zcml += eea.facetednavigation-meta 8 | 9 | [plonesite] 10 | enabled = True 11 | site-id = plone 12 | profiles += eea.facetednavigation:universal 13 | 14 | [versions] 15 | eea.facetednavigation=13.7 16 | plone.restapi=6.13.0 17 | 18 | 19 | [instance] 20 | zeo-client = true 21 | zeo-address = zeo:8080 22 | shared-blob = off 23 | http-fast-listen = off 24 | -------------------------------------------------------------------------------- /test/tests/plone-zeosite/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | # not using '--entrypoint', since regular entrypoint sets up config 5 | docker run -i --rm \ 6 | -e PLONE_DEVELOP=src/eea.facetednavigation \ 7 | -e PLONE_ADDONS=eea.facetednavigation \ 8 | -e PLONE_ZCML=eea.facetednavigation-meta \ 9 | -e PLONE_VERSIONS="eea.facetednavigation=13.7 plone.restapi=6.13.0" \ 10 | -e PLONE_SITE="plone" \ 11 | -e PLONE_PROFILES="eea.facetednavigation:universal" \ 12 | -e ZEO_ADDRESS="zeo:8080" \ 13 | -v /plone/instance/bin/develop \ 14 | "$1" cat custom.cfg 15 | -------------------------------------------------------------------------------- /test/tests/postfixadmin-apache-run/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | # Use a client image with curl for testing 7 | clientImage='buildpack-deps:bookworm-curl' 8 | # ensure the clientImage is ready and available 9 | if ! docker image inspect "$clientImage" &> /dev/null; then 10 | docker pull "$clientImage" > /dev/null 11 | fi 12 | 13 | serverImage="$1" 14 | 15 | # Create an instance of the container-under-test 16 | cid="$(docker run -d "$serverImage")" 17 | trap "docker rm -vf $cid > /dev/null" EXIT 18 | 19 | _request() { 20 | local method="$1" 21 | shift 22 | 23 | local url="${1#/}" 24 | shift 25 | 26 | docker run --rm \ 27 | --link "$cid":apache \ 28 | "$clientImage" \ 29 | curl -fsL -X"$method" "$@" "http://apache/$url" 30 | } 31 | 32 | # Make sure that Apache is listening and ready 33 | . "$dir/../../retry.sh" --tries 10 '_request GET / --output /dev/null' 34 | 35 | # Check that we can request / and that it contains the word "login" somewhere 36 | _request GET '/' | grep -i login > /dev/null 37 | -------------------------------------------------------------------------------- /test/tests/postfixadmin-fpm-run/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | # Build a client image with cgi-fcgi for testing 9 | clientImage='librarytest/posfixadmin-fpm-run:fcgi-client' 10 | docker build -t "$clientImage" - > /dev/null <<'EOF' 11 | FROM debian:bookworm-slim 12 | 13 | RUN set -x && apt-get update && apt-get install -y --no-install-recommends libfcgi-bin && rm -rf /var/lib/apt/lists/* 14 | 15 | ENTRYPOINT ["cgi-fcgi"] 16 | EOF 17 | 18 | # Create an instance of the container-under-test 19 | cid="$(docker run -d "$image")" 20 | trap "docker rm -vf $cid > /dev/null" EXIT 21 | 22 | fcgi-request() { 23 | local method="$1" 24 | 25 | local url="$2" 26 | local queryString= 27 | if [[ "$url" == *\?* ]]; then 28 | queryString="${url#*\?}" 29 | url="${url%%\?*}" 30 | fi 31 | 32 | docker run --rm -i --link "$cid":fpm \ 33 | -e REQUEST_METHOD="$method" \ 34 | -e SCRIPT_NAME="$url" \ 35 | -e SCRIPT_FILENAME=/var/www/html/public/"${url#/}" \ 36 | -e QUERY_STRING="$queryString" \ 37 | -e HTTP_HOST='localhost' \ 38 | "$clientImage" \ 39 | -bind -connect fpm:9000 40 | } 41 | 42 | # Make sure that PHP-FPM is listening and ready 43 | . "$dir/../../retry.sh" --tries 10 'fcgi-request GET /index.php' > /dev/null 2>&1 44 | 45 | # index.php redirects to login.php, check that it contains the word "login" somewhere 46 | fcgi-request GET '/login.php' | grep -i login > /dev/null 47 | -------------------------------------------------------------------------------- /test/tests/postgres-basics/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | export POSTGRES_USER='my cool postgres user' 9 | export POSTGRES_PASSWORD='my cool postgres password' 10 | export POSTGRES_DB='my cool postgres database' 11 | 12 | cname="postgres-container-$RANDOM-$RANDOM" 13 | cid="$(docker run -d -e POSTGRES_USER -e POSTGRES_PASSWORD -e POSTGRES_DB --name "$cname" "$image")" 14 | trap "docker rm -vf $cid > /dev/null" EXIT 15 | 16 | psql() { 17 | docker run --rm -i \ 18 | --link "$cname":postgres \ 19 | --entrypoint psql \ 20 | -e PGPASSWORD="$POSTGRES_PASSWORD" \ 21 | "$image" \ 22 | --host postgres \ 23 | --username "$POSTGRES_USER" \ 24 | --dbname "$POSTGRES_DB" \ 25 | --quiet --no-align --tuples-only \ 26 | "$@" 27 | } 28 | 29 | . "$dir/../../retry.sh" --tries "$POSTGRES_TEST_TRIES" --sleep "$POSTGRES_TEST_SLEEP" "echo 'SELECT 1' | psql" 30 | 31 | echo 'CREATE TABLE test (a INT, b INT, c VARCHAR(255))' | psql 32 | [ "$(echo 'SELECT COUNT(*) FROM test' | psql)" = 0 ] 33 | psql <<'EOSQL' 34 | INSERT INTO test VALUES (1, 2, 'hello') 35 | EOSQL 36 | [ "$(echo 'SELECT COUNT(*) FROM test' | psql)" = 1 ] 37 | psql <<'EOSQL' 38 | INSERT INTO test VALUES (2, 3, 'goodbye!') 39 | EOSQL 40 | [ "$(echo 'SELECT COUNT(*) FROM test' | psql)" = 2 ] 41 | echo 'DELETE FROM test WHERE a = 1' | psql 42 | [ "$(echo 'SELECT COUNT(*) FROM test' | psql)" = 1 ] 43 | [ "$(echo 'SELECT c FROM test' | psql)" = 'goodbye!' ] 44 | echo 'DROP TABLE test' | psql 45 | 46 | # test jit support to ensure llvm lib is correct 47 | # SET jit = on; is required for postgres 11; on 12+ it is on by default 48 | [ "$(echo 'SET jit = on; SELECT pg_jit_available();' | psql)" = 't' ] 49 | -------------------------------------------------------------------------------- /test/tests/postgres-initdb/initdb.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE test (a INT, b INT, c VARCHAR(255)); 2 | INSERT INTO test VALUES (1, 2, 'hello'); 3 | INSERT INTO test VALUES (2, 3, 'goodbye!'); 4 | DELETE FROM test WHERE a = 1; 5 | -------------------------------------------------------------------------------- /test/tests/postgres-initdb/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | serverImage="$("$dir/../image-name.sh" librarytest/postgres-initdb "$image")" 9 | "$dir/../docker-build.sh" "$dir" "$serverImage" < /dev/null" EXIT 28 | 29 | psql() { 30 | docker run --rm -i \ 31 | --link "$cname":postgres \ 32 | --entrypoint psql \ 33 | -e PGPASSWORD="$POSTGRES_PASSWORD" \ 34 | "$image" \ 35 | --host postgres \ 36 | --username "$POSTGRES_USER" \ 37 | --dbname "$POSTGRES_DB" \ 38 | --quiet --no-align --tuples-only \ 39 | "$@" 40 | } 41 | 42 | . "$dir/../../retry.sh" --tries "$POSTGRES_TEST_TRIES" --sleep "$POSTGRES_TEST_SLEEP" "echo 'SELECT 1' | psql" 43 | 44 | [ "$(echo 'SELECT COUNT(*) FROM test' | psql)" = 1 ] 45 | [ "$(echo 'SELECT c FROM test' | psql)" = 'goodbye!' ] 46 | -------------------------------------------------------------------------------- /test/tests/python-imports/container.py: -------------------------------------------------------------------------------- 1 | import platform, sys 2 | 3 | isWindows = platform.system() == 'Windows' 4 | isNotPypy = platform.python_implementation() != 'PyPy' 5 | isCaveman = sys.version_info[0] == 2 6 | 7 | if not isWindows: 8 | import curses 9 | import readline 10 | 11 | if isCaveman: 12 | import gdbm 13 | else: 14 | import dbm.gnu 15 | import dbm.ndbm 16 | 17 | import bz2 18 | assert(bz2.decompress(bz2.compress(b'IT WORKS IT WORKS IT WORKS')) == b'IT WORKS IT WORKS IT WORKS') 19 | 20 | import zlib 21 | assert(zlib.decompress(zlib.compress(b'IT WORKS IT WORKS IT WORKS')) == b'IT WORKS IT WORKS IT WORKS') 22 | 23 | if not isCaveman: 24 | import lzma 25 | assert(lzma.decompress(lzma.compress(b'IT WORKS IT WORKS IT WORKS')) == b'IT WORKS IT WORKS IT WORKS') 26 | 27 | # https://github.com/docker-library/python/pull/954 28 | shouldHaveSetuptoolsAndWheel = sys.version_info[0] == 3 and sys.version_info[1] < 12 29 | import importlib.util 30 | hasSetuptools = importlib.util.find_spec('setuptools') is not None 31 | hasWheel = importlib.util.find_spec('wheel') is not None 32 | assert(hasSetuptools == shouldHaveSetuptoolsAndWheel) 33 | assert(hasWheel == shouldHaveSetuptoolsAndWheel) 34 | -------------------------------------------------------------------------------- /test/tests/python-imports/run.sh: -------------------------------------------------------------------------------- 1 | ../run-python-in-container.sh -------------------------------------------------------------------------------- /test/tests/python-no-pyc/container.cmd: -------------------------------------------------------------------------------- 1 | rem N/A: Windows-based Python images may or may not contain ".pyc" and/or ".pyo" files because they are not a significant contributor to the overall image size 2 | -------------------------------------------------------------------------------- /test/tests/python-no-pyc/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | find /usr/local /opt '(' -name '*.pyc' -o -name '*.pyo' ')' -print -exec false '{}' + 5 | -------------------------------------------------------------------------------- /test/tests/python-no-pyc/run.sh: -------------------------------------------------------------------------------- 1 | ../run-sh-in-container.sh -------------------------------------------------------------------------------- /test/tests/python-pip-requests-ssl/container.py: -------------------------------------------------------------------------------- 1 | import subprocess, sys 2 | subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'requests']) 3 | 4 | import requests 5 | r = requests.get('https://google.com') 6 | assert(r.status_code == 200) 7 | -------------------------------------------------------------------------------- /test/tests/python-pip-requests-ssl/run.sh: -------------------------------------------------------------------------------- 1 | ../run-python-in-container.sh -------------------------------------------------------------------------------- /test/tests/python-sqlite3/container.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | 3 | ver = sqlite3.sqlite_version 4 | 5 | con = sqlite3.connect(':memory:', timeout=1, detect_types=sqlite3.PARSE_DECLTYPES, isolation_level=None) 6 | cur = con.cursor() 7 | cur.execute('CREATE TABLE test (id INT, txt TEXT)') 8 | cur.execute('INSERT INTO test VALUES (?, ?)', (42, 'wut')) 9 | cur.execute('SELECT * FROM test') 10 | assert(cur.fetchall() == [(42, 'wut')]) 11 | cur.execute('DROP TABLE test') 12 | con.close() 13 | -------------------------------------------------------------------------------- /test/tests/python-sqlite3/run.sh: -------------------------------------------------------------------------------- 1 | ../run-python-in-container.sh -------------------------------------------------------------------------------- /test/tests/python-stack-size/container.py: -------------------------------------------------------------------------------- 1 | import threading 2 | import sys 3 | 4 | 5 | def fun(i): 6 | try: 7 | fun(i+1) 8 | except: 9 | sys.exit(0) 10 | 11 | 12 | t = threading.Thread(target=fun, args=[1]) 13 | t.start() 14 | -------------------------------------------------------------------------------- /test/tests/python-stack-size/run.sh: -------------------------------------------------------------------------------- 1 | ../run-python-in-container.sh -------------------------------------------------------------------------------- /test/tests/rabbitmq-basics/receive.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import pika 3 | 4 | # https://www.rabbitmq.com/tutorials/tutorial-one-python.html 5 | 6 | connection = pika.BlockingConnection(pika.ConnectionParameters('rabbitmq')) 7 | channel = connection.channel() 8 | 9 | channel.queue_declare(queue='hello') 10 | 11 | def callback(ch, method, properties, body): 12 | print(body.decode('utf-8')) 13 | connection.close() 14 | 15 | channel.basic_consume(queue='hello', 16 | auto_ack=True, 17 | on_message_callback=callback) 18 | 19 | channel.start_consuming() 20 | -------------------------------------------------------------------------------- /test/tests/rabbitmq-basics/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | # https://www.rabbitmq.com/tutorials/tutorial-one-python.html 5 | 6 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 7 | 8 | serverImage="$1" 9 | 10 | clientImage="$("$dir/../image-name.sh" librarytest/rabbitmq-basics "$serverImage")" 11 | "$dir/../docker-build.sh" "$dir" "$clientImage" <> /etc/rabbitmq/rabbitmq.conf && exec rabbitmq-server' 29 | )" 30 | trap "docker rm -vf $cid > /dev/null" EXIT 31 | 32 | client() { 33 | docker run -i --rm \ 34 | --link "$cname":rabbitmq \ 35 | "$clientImage" \ 36 | "$@" 37 | } 38 | 39 | . "$dir/../../retry.sh" 'client testconn.py' 40 | 41 | test-send-recv() { 42 | local payload="$1"; shift 43 | client send.py "$payload" 44 | response="$(client receive.py)" 45 | if [ "$payload" != "$response" ]; then 46 | echo >&2 "error: expected '$payload' but got '$response' instead" 47 | return 1 48 | fi 49 | } 50 | 51 | test-send-recv 'hello' 52 | test-send-recv "$RANDOM" 53 | test-send-recv $'a\nb\nc\td' 54 | -------------------------------------------------------------------------------- /test/tests/rabbitmq-basics/send.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import pika, sys 3 | 4 | # https://www.rabbitmq.com/tutorials/tutorial-one-python.html 5 | 6 | connection = pika.BlockingConnection(pika.ConnectionParameters('rabbitmq')) 7 | channel = connection.channel() 8 | 9 | channel.queue_declare(queue='hello') 10 | 11 | channel.basic_publish(exchange='', 12 | routing_key='hello', 13 | body=sys.argv[1]) 14 | 15 | connection.close() 16 | -------------------------------------------------------------------------------- /test/tests/rabbitmq-basics/testconn.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import pika 3 | 4 | # https://www.rabbitmq.com/tutorials/tutorial-one-python.html 5 | 6 | connection = pika.BlockingConnection(pika.ConnectionParameters('rabbitmq')) 7 | channel = connection.channel() 8 | 9 | channel.queue_declare(queue='hello') 10 | 11 | connection.close() 12 | -------------------------------------------------------------------------------- /test/tests/rabbitmq-tls/inet-dist-tls.config: -------------------------------------------------------------------------------- 1 | [ 2 | {server, [ 3 | {cacertfile,"/certs/ca.crt"}, 4 | {certfile, "/certs/cert.crt"}, 5 | {keyfile, "/certs/private.key"}, 6 | {secure_renegotiate, true}, 7 | {verify, verify_peer}, 8 | {fail_if_no_peer_cert, true} 9 | ]}, 10 | {client, [ 11 | {cacertfile,"/certs/ca.crt"}, 12 | {certfile, "/certs/cert.crt"}, 13 | {keyfile, "/certs/private.key"}, 14 | {secure_renegotiate, true}, 15 | {verify, verify_peer} 16 | ]} 17 | ]. 18 | -------------------------------------------------------------------------------- /test/tests/rabbitmq-tls/rabbitmq-env.conf: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # https://www.rabbitmq.com/clustering-ssl.html 4 | ERL_SSL_PATH="$(erl -eval 'io:format("~p", [code:lib_dir(ssl, ebin)]),halt().' -noshell)" 5 | 6 | sslErlArgs="-pa $ERL_SSL_PATH -proto_dist inet_tls -ssl_dist_optfile /etc/rabbitmq/inet-dist-tls.config" 7 | 8 | SERVER_ADDITIONAL_ERL_ARGS="$sslErlArgs" 9 | CTL_ERL_ARGS="$sslErlArgs" 10 | 11 | if [ -n "$ERLANG_COOKIE" ]; then 12 | SERVER_ADDITIONAL_ERL_ARGS="$SERVER_ADDITIONAL_ERL_ARGS -setcookie $ERLANG_COOKIE" 13 | CTL_ERL_ARGS="$CTL_ERL_ARGS -setcookie $ERLANG_COOKIE" 14 | fi 15 | -------------------------------------------------------------------------------- /test/tests/rabbitmq-tls/rabbitmq.conf: -------------------------------------------------------------------------------- 1 | loopback_users.guest = false 2 | listeners.ssl.default = 5671 3 | ssl_options.cacertfile = /certs/ca.crt 4 | ssl_options.certfile = /certs/cert.crt 5 | ssl_options.fail_if_no_peer_cert = true 6 | ssl_options.keyfile = /certs/private.key 7 | ssl_options.verify = verify_peer 8 | -------------------------------------------------------------------------------- /test/tests/redis-basics-config/real-run.sh: -------------------------------------------------------------------------------- 1 | ../redis-basics/run.sh -------------------------------------------------------------------------------- /test/tests/redis-basics-config/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | newImage="$("$dir/../image-name.sh" librarytest/redis-basics-persistent "$image")" 9 | "$dir/../docker-build.sh" "$dir" "$newImage" < ../test.conf 12 | CMD ["../test.conf", "--appendonly", "yes"] 13 | EOD 14 | 15 | exec "$dir/real-run.sh" "$newImage" 16 | -------------------------------------------------------------------------------- /test/tests/redis-basics-persistent/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | cname="redis-container-$RANDOM-$RANDOM" 9 | cid="$(docker run -d --name "$cname" "$image")" 10 | trap "docker rm -vf $cid > /dev/null" EXIT 11 | 12 | redis-cli() { 13 | docker run --rm -i \ 14 | --link "$cname":redis \ 15 | --entrypoint redis-cli \ 16 | "$image" \ 17 | -h redis \ 18 | "$@" 19 | } 20 | 21 | # http://redis.io/topics/quickstart#check-if-redis-is-working 22 | 23 | . "$dir/../../retry.sh" --tries 20 '[ "$(redis-cli ping)" = "PONG" ]' 24 | 25 | [ "$(redis-cli set mykey somevalue)" = 'OK' ] 26 | [ "$(redis-cli get mykey)" = 'somevalue' ] 27 | 28 | docker stop "$cname" 29 | docker start "$cname" 30 | 31 | . "$dir/../../retry.sh" --tries 20 '[ "$(redis-cli ping)" = "PONG" ]' 32 | 33 | [ "$(redis-cli get mykey)" = 'somevalue' ] 34 | -------------------------------------------------------------------------------- /test/tests/redis-basics-tls/run.sh: -------------------------------------------------------------------------------- 1 | ../redis-basics/run.sh -------------------------------------------------------------------------------- /test/tests/redmine-basics/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -Eeuo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | serverImage="$1" 7 | 8 | # Use a client image with curl for testing 9 | clientImage='buildpack-deps:bookworm-curl' 10 | # ensure the clientImage is ready and available 11 | if ! docker image inspect "$clientImage" &> /dev/null; then 12 | docker pull "$clientImage" > /dev/null 13 | fi 14 | 15 | # Create an instance of the container-under-test 16 | cid="$(docker run -d "$serverImage")" 17 | trap "docker rm -vf $cid > /dev/null" EXIT 18 | 19 | _request() { 20 | local method="$1" 21 | shift 22 | 23 | local url="${1#/}" 24 | shift 25 | 26 | docker run --rm \ 27 | --link "$cid":redmine \ 28 | "$clientImage" \ 29 | curl -fs -X"$method" "$@" "http://redmine:3000/$url" 30 | } 31 | 32 | # Make sure that Redmine is listening and ready 33 | # (give it plenty of time, since it needs to do a lot of database migrations) 34 | . "$dir/../../retry.sh" --tries 40 '_request GET / --output /dev/null' 35 | 36 | # Check that / include the text "Redmine" somewhere 37 | _request GET '/' | grep Redmine > /dev/null 38 | 39 | # Check that /account/register include the text "Password" somewhere 40 | _request GET '/account/register' | grep Password > /dev/null 41 | -------------------------------------------------------------------------------- /test/tests/ruby-binstubs/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'bundler-audit', '0.9.1' 3 | gem 'brakeman', '5.4.1' 4 | -------------------------------------------------------------------------------- /test/tests/ruby-binstubs/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | dir="$(mktemp -d)" 5 | trap "rm -rf '$dir'" EXIT 6 | 7 | cp Gemfile "$dir" 8 | 9 | cd "$dir" 10 | 11 | bundle install 12 | bundle audit version 13 | -------------------------------------------------------------------------------- /test/tests/ruby-binstubs/run.sh: -------------------------------------------------------------------------------- 1 | ../run-sh-in-container.sh -------------------------------------------------------------------------------- /test/tests/ruby-bundler/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'nokogiri' 3 | gem 'rack', '~>1.1' 4 | gem 'rspec', :require => 'spec' 5 | -------------------------------------------------------------------------------- /test/tests/ruby-bundler/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | dir="$(mktemp -d)" 5 | trap "rm -rf '$dir'" EXIT 6 | 7 | cp Gemfile "$dir" 8 | 9 | # make sure that running "bundle" twice doesn't change Gemfile.lock the second time 10 | cd "$dir" 11 | BUNDLE_FROZEN=0 bundle install 12 | cp Gemfile.lock Gemfile.lock.orig 13 | BUNDLE_FROZEN=1 bundle install 14 | diff -u Gemfile.lock.orig Gemfile.lock >&2 15 | 16 | if ruby -rbundler -e 'exit Gem::Version.new(Bundler::VERSION) >= Gem::Version.new("2.1") ? 0 : 1'; then 17 | BUNDLE_DEPLOYMENT=1 bundle install 18 | else 19 | bundle install --deployment 20 | fi 21 | diff -u Gemfile.lock.orig Gemfile.lock >&2 22 | -------------------------------------------------------------------------------- /test/tests/ruby-bundler/run.sh: -------------------------------------------------------------------------------- 1 | ../run-sh-in-container.sh -------------------------------------------------------------------------------- /test/tests/ruby-gems/container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | gems="$(ruby -e ' 5 | # list taken from https://rubygems.org/stats 6 | gems = %w{ 7 | bundler 8 | multi_json 9 | rake 10 | rack 11 | json 12 | mime-types 13 | activesupport 14 | thor 15 | i18n 16 | diff-lcs 17 | } 18 | # last updated 2017-11-15 19 | 20 | require "json" 21 | require "open-uri" 22 | 23 | # https://github.com/ruby/ruby/commit/05aac90a1bcfeb180f5e78ea8b00a4d1b04d5eed 24 | # https://bugs.ruby-lang.org/issues/15893 25 | # for Ruby 2.5+, we should use "URI.open", but for Ruby 2.4 we still need to use "open(...)" directly 26 | def openURI(uri) 27 | if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create("2.5") 28 | URI.open(uri) 29 | else 30 | open(uri) 31 | end 32 | end 33 | 34 | for gem in gems 35 | # ruby 2.2.2+: rack activesupport 36 | # ruby 2.0+: mime-types 37 | # (jruby 1.7 is ruby 1.9) 38 | gemRubyVersion = JSON.load(openURI("https://rubygems.org/api/v1/versions/#{ gem }.json"))[0]["ruby_version"] 39 | if Gem::Dependency.new("", gemRubyVersion).match?("", RUBY_VERSION) 40 | puts gem 41 | else 42 | STDERR.puts "skipping #{ gem } due to required Ruby version: #{ gemRubyVersion } (vs #{ RUBY_VERSION })" 43 | end 44 | end 45 | ')" 46 | 47 | for gem in $gems; do 48 | echo "$ gem install $gem" 49 | gem install "$gem" 50 | done 51 | -------------------------------------------------------------------------------- /test/tests/ruby-gems/run.sh: -------------------------------------------------------------------------------- 1 | ../run-sh-in-container.sh -------------------------------------------------------------------------------- /test/tests/ruby-hello-world/container.rb: -------------------------------------------------------------------------------- 1 | print 'Hello World!' 2 | -------------------------------------------------------------------------------- /test/tests/ruby-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello World! 2 | -------------------------------------------------------------------------------- /test/tests/ruby-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-ruby-in-container.sh -------------------------------------------------------------------------------- /test/tests/ruby-native-extension/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | it works 2 | -------------------------------------------------------------------------------- /test/tests/ruby-native-extension/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | buildDepsImage="$image" 9 | if ! docker run --rm --entrypoint sh "$image" -c 'command -v gcc' > /dev/null; then 10 | buildDepsImage="$("$dir/../image-name.sh" librarytest/ruby-native-extension "$image")" 11 | 12 | os="$(docker run --rm --entrypoint sh "$image" -c '. /etc/os-release && echo "$ID"')" 13 | case "$os" in 14 | alpine) 15 | "$dir/../docker-build.sh" "$dir" "$buildDepsImage" <<-EOD 16 | FROM $image 17 | RUN apk add --no-cache gcc make musl-dev 18 | EOD 19 | ;; 20 | 21 | *) # must be Debian slim variants (no gcc but not Alpine) 22 | "$dir/../docker-build.sh" "$dir" "$buildDepsImage" <<-EOD 23 | FROM $image 24 | RUN set -eux; \ 25 | apt-get update; \ 26 | apt-get install -y --no-install-recommends gcc make libc6-dev; \ 27 | rm -rf /var/lib/apt/lists/* 28 | EOD 29 | ;; 30 | esac 31 | fi 32 | 33 | docker run --interactive --rm --entrypoint sh "$buildDepsImage" -eu <<-'EOSH' 34 | if command -v jruby > /dev/null; then 35 | platform='jruby' 36 | else 37 | platform='ruby' 38 | fi 39 | gem install bcrypt \ 40 | --version 3.1.16 \ 41 | --platform "$platform" \ 42 | --silent 43 | ruby -e 'require "bcrypt"; print "it works\n"' 44 | EOSH 45 | -------------------------------------------------------------------------------- /test/tests/ruby-nonroot/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'advanced_math' 3 | -------------------------------------------------------------------------------- /test/tests/ruby-nonroot/container.sh: -------------------------------------------------------------------------------- 1 | ../ruby-bundler/container.sh -------------------------------------------------------------------------------- /test/tests/ruby-nonroot/real-run.sh: -------------------------------------------------------------------------------- 1 | ../ruby-bundler/run.sh -------------------------------------------------------------------------------- /test/tests/ruby-nonroot/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | newImage="$("$dir/../image-name.sh" librarytest/ruby-nonroot "$image")" 9 | "$dir/../docker-build.sh" "$dir" "$newImage" <"] 5 | 6 | [dependencies] 7 | libc = "0.2" # just make sure we can pull dependencies 8 | -------------------------------------------------------------------------------- /test/tests/rust-hello-world/container/src/main.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | println!("Hello, world!"); 3 | } 4 | -------------------------------------------------------------------------------- /test/tests/rust-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello, world! 2 | -------------------------------------------------------------------------------- /test/tests/rust-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-rust-in-container.sh -------------------------------------------------------------------------------- /test/tests/swift-hello-world/container.swift: -------------------------------------------------------------------------------- 1 | print("Hello, world!") 2 | -------------------------------------------------------------------------------- /test/tests/swift-hello-world/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Hello, world! 2 | -------------------------------------------------------------------------------- /test/tests/swift-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | ../run-swift-in-container.sh -------------------------------------------------------------------------------- /test/tests/swipl-modules/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | Loaded modules successfully. 2 | -------------------------------------------------------------------------------- /test/tests/swipl-modules/run.sh: -------------------------------------------------------------------------------- 1 | ../run-swipl-in-container.sh -------------------------------------------------------------------------------- /test/tests/tomcat-hello-world/index.jsp: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sample JSP Page 4 | 5 | 6 | <%= new String("Hello") %> <%= new String("Docker") %> <%= new String("World!") %> 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/tests/tomcat-hello-world/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | # Use a client image with curl for testing 9 | clientImage='buildpack-deps:bookworm-curl' 10 | # ensure the clientImage is ready and available 11 | if ! docker image inspect "$clientImage" &> /dev/null; then 12 | docker pull "$clientImage" > /dev/null 13 | fi 14 | 15 | serverImage="$("$dir/../image-name.sh" librarytest/tomcat-hello-world "$image")" 16 | "$dir/../docker-build.sh" "$dir" "$serverImage" < /dev/null" EXIT 24 | 25 | _request() { 26 | local url="${1#/}" 27 | shift 28 | 29 | docker run --rm \ 30 | --link "$cid":tomcat \ 31 | "$clientImage" \ 32 | curl -fsSL "$@" "http://tomcat:8080/$url" 33 | } 34 | 35 | # Make sure that Tomcat is listening 36 | . "$dir/../../retry.sh" '_request / &> /dev/null' 37 | 38 | # Check that our simple servlet works 39 | helloWorld="$(_request '/')" 40 | [[ "$helloWorld" == *'Hello Docker World!'* ]] 41 | -------------------------------------------------------------------------------- /test/tests/utc/expected-std-out.txt: -------------------------------------------------------------------------------- 1 | UTC 2 | -------------------------------------------------------------------------------- /test/tests/utc/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker run --rm --entrypoint date "$1" +%Z 5 | -------------------------------------------------------------------------------- /test/tests/varnish/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | vname="varnish-volume-$RANDOM-$RANDOM" 9 | trap "docker volume rm $vname > /dev/null" EXIT 10 | docker volume create --driver local \ 11 | --opt type=tmpfs \ 12 | --opt device=tmpfs \ 13 | --opt o=size=100m \ 14 | $vname 15 | 16 | 17 | cname="varnish-container-$RANDOM-$RANDOM" 18 | cid="$( 19 | docker run -d \ 20 | -v $vname:/var/lib/varnish \ 21 | --name "$cname" \ 22 | "$image" \ 23 | varnishd -F -a 0:0 -f /etc/varnish/default.vcl 24 | )" 25 | trap "docker rm -vf $cid > /dev/null; docker volume rm $vname > /dev/null" EXIT 26 | 27 | sidecar() { 28 | docker run --rm -i \ 29 | --network container:"$cid" \ 30 | -v $vname:/var/lib/varnish \ 31 | "$image" \ 32 | "$@" > /dev/null 33 | } 34 | 35 | set -x 36 | sidecar varnishlog -d 37 | sidecar varnishncsa -d 38 | sidecar varnishstat -1 39 | sidecar varnishreload 40 | sidecar varnishadm ping 41 | -------------------------------------------------------------------------------- /test/tests/wordpress-apache-run/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | # Use a client image with curl for testing 7 | clientImage='buildpack-deps:bookworm-curl' 8 | # ensure the clientImage is ready and available 9 | if ! docker image inspect "$clientImage" &> /dev/null; then 10 | docker pull "$clientImage" > /dev/null 11 | fi 12 | 13 | mysqlImage='mysql:5.7' 14 | # ensure the mysqlImage is ready and available 15 | if ! docker image inspect "$mysqlImage" &> /dev/null; then 16 | docker pull "$mysqlImage" > /dev/null 17 | fi 18 | serverImage="$1" 19 | 20 | # Create an instance of the container-under-test 21 | mysqlCid="$(docker run -d -e MYSQL_ROOT_PASSWORD="test-$RANDOM-password-$RANDOM-$$" "$mysqlImage")" 22 | trap "docker rm -vf $mysqlCid > /dev/null" EXIT 23 | cid="$(docker run -d --link "$mysqlCid":mysql "$serverImage")" 24 | trap "docker rm -vf $cid $mysqlCid > /dev/null" EXIT 25 | 26 | _request() { 27 | local method="$1" 28 | shift 29 | 30 | local url="${1#/}" 31 | shift 32 | 33 | docker run --rm \ 34 | --link "$cid":apache \ 35 | "$clientImage" \ 36 | curl -fsL -X"$method" "$@" "http://apache/$url" 37 | } 38 | 39 | # Make sure that Apache is listening and ready 40 | . "$dir/../../retry.sh" --tries 30 '_request GET / --output /dev/null' 41 | # (give it a bit long since it won't start until MySQL is started and ready) 42 | 43 | # Check that we can request / and that it contains the word "setup" somewhere 44 | #
45 | _request GET '/' | grep -i setup > /dev/null 46 | -------------------------------------------------------------------------------- /test/tests/znc-basics/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | volume="$(docker volume create)" 5 | trap "docker volume rm '$volume' &> /dev/null" EXIT 6 | 7 | docker run --rm --volume="$volume:/znc-data" "$1" --makepem 8 | docker run --rm --volume="$volume:/znc-data" --entrypoint=grep "$1" 'BEGIN RSA PRIVATE KEY' /znc-data/znc.pem 9 | -------------------------------------------------------------------------------- /test/tests/zookeeper-basics/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")" 5 | 6 | image="$1" 7 | 8 | ZOOKEEPER_TEST_SLEEP=3 9 | ZOOKEEPER_TEST_TRIES=5 10 | 11 | cname="zookeeper-container-$RANDOM-$RANDOM" 12 | cid="$(docker run -d --name "$cname" "$image")" 13 | trap "docker rm -vf $cid > /dev/null" EXIT 14 | 15 | zkCli() { 16 | docker run --rm -i \ 17 | --link "$cname":zookeeper \ 18 | "$image" \ 19 | zkCli.sh \ 20 | -server zookeeper \ 21 | "$@" 22 | } 23 | 24 | . "$dir/../../retry.sh" --tries "$ZOOKEEPER_TEST_TRIES" --sleep "$ZOOKEEPER_TEST_SLEEP" zkCli ls / 25 | 26 | # List and check Zookeeper root 27 | zkCli ls / | grep '^\[zookeeper\]$' > /dev/null 28 | --------------------------------------------------------------------------------