镜像构建历史
# 2026-09-24 17:34:58 0.00B 设置默认要执行的命令
CMD ["/usr/local/bin/entrypoint.sh"]
# 2026-09-24 17:34:58 0.00B 指定检查容器健康状态的命令
HEALTHCHECK {Test:[CMD-SHELL python -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1/healthz', timeout=4).status==200 else 1)" || exit 1] Interval:30s Timeout:5s StartPeriod:5s StartInterval:0s Retries:3}
# 2026-09-24 17:34:58 0.00B 声明容器运行时监听的端口
EXPOSE [80/tcp]
# 2026-09-24 17:34:58 270.52MB 复制新文件或目录到容器中
COPY /app/apps/geolibre-desktop/dist /usr/share/nginx/html # buildkit
# 2026-09-24 11:56:44 33.93KB 执行命令并创建新的镜像层
RUN |1 TARGETARCH=amd64 /bin/sh -c chmod +x /usr/local/bin/entrypoint.sh && printf '# Basic Auth disabled (GEOLIBRE_AUTH_USER/GEOLIBRE_AUTH_PASSWORD not set).\n' > /etc/nginx/geolibre-auth.conf && printf '# AI proxy disabled (GEOLIBRE_AI_URL not set).\n' > /etc/nginx/geolibre-ai-proxy.conf # buildkit
# 2026-09-24 11:56:44 33.80KB 复制新文件或目录到容器中
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh # buildkit
# 2026-09-24 11:56:44 13.92KB 复制新文件或目录到容器中
COPY docker/nginx.conf /etc/nginx/nginx.conf.template # buildkit
# 2026-09-24 11:56:44 0.00B 执行命令并创建新的镜像层
RUN |1 TARGETARCH=amd64 /bin/sh -c mkdir -p /data # buildkit
# 2026-09-24 11:56:43 0.00B 设置环境变量 GEOLIBRE_CONVERSION_PYTHON WBW_EXTERNAL_PYTHON GEOLIBRE_CONVERSION_ROOTS
ENV GEOLIBRE_CONVERSION_PYTHON=/usr/local/bin/python WBW_EXTERNAL_PYTHON=/usr/local/bin/python GEOLIBRE_CONVERSION_ROOTS=/data
# 2026-09-24 11:56:43 307.91MB 执行命令并创建新的镜像层
RUN |1 TARGETARCH=amd64 /bin/sh -c if [ "$TARGETARCH" = "amd64" ]; then pip install --no-cache-dir "freestiler>=0.1.0" "whitebox-workflows>=2.0.2"; else echo "Skipping freestiler + whitebox-workflows on $TARGETARCH (no wheels)"; fi # buildkit
# 2026-09-24 11:56:34 336.15MB 执行命令并创建新的镜像层
RUN |1 TARGETARCH=amd64 /bin/sh -c pip install --no-cache-dir /opt/geolibre_server && pip install --no-cache-dir "duckdb>=1.1.0" "rio-cogeo>=5.0.0" # buildkit
# 2026-09-24 11:56:19 1.49MB 复制新文件或目录到容器中
COPY backend/geolibre_server /opt/geolibre_server # buildkit
# 2026-09-19 10:09:12 7.92MB 执行命令并创建新的镜像层
RUN |1 TARGETARCH=amd64 /bin/sh -c apt-get update && apt-get install -y --no-install-recommends nginx libexpat1 openssl && rm -rf /var/lib/apt/lists/* && rm -f /etc/nginx/sites-enabled/default # buildkit
# 2026-09-19 10:09:12 0.00B 定义构建参数
ARG TARGETARCH=amd64
# 2026-09-19 09:08:17 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-09-19 09:08:17 36.00B 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit
# 2026-09-19 09:08:17 40.24MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev g++ gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev ; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; LDFLAGS="${LDFLAGS:-} -Wl,--strip-all"; arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; case "$arch" in amd64|arm64) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"; ;; i386) ;; *) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer"; ;; esac; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\$\$ORIGIN/../lib'" python ; make install; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark; find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' | sort -u | xargs -rt dpkg-query --search | awk 'sub(":$", "", $1) { print $1 }' | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; rm -rf /var/lib/apt/lists/*; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit
# 2026-09-19 08:58:59 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a
# 2026-09-19 08:58:59 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.12.14
# 2026-09-19 08:58:59 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
# 2026-09-19 08:58:59 9.28MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; rm -rf /var/lib/apt/lists/* # buildkit
# 2026-09-19 08:58:59 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-09-19 08:58:59 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-09-18 08:00:00 74.83MB
# debian.sh --arch 'amd64' out/ 'bookworm' '@1789689600'
镜像信息
{
"Id": "sha256:35300532496cf46750f9ae261aee5a8f44306ff95adef19bccb21885e3991da0",
"RepoTags": [
"ghcr.io/opengeos/geolibre:latest",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/opengeos/geolibre:latest"
],
"RepoDigests": [
"ghcr.io/opengeos/geolibre@sha256:359d27d27da4dd76c10384be483b65524aaec9edaa1ca83a4fac6ec26918a44f",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/opengeos/geolibre@sha256:e0446d142cd18cd4d30c33ad828c45afc8d42a6b03d28487d2a1e562a8194c9c"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-09-24T09:34:58.382329666Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=C.UTF-8",
"GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305",
"PYTHON_VERSION=3.12.14",
"PYTHON_SHA256=5c8462af5790baf43a321a1559dbe0db06d1be4300fb85fb53c40060668e548a",
"GEOLIBRE_CONVERSION_PYTHON=/usr/local/bin/python",
"WBW_EXTERNAL_PYTHON=/usr/local/bin/python",
"GEOLIBRE_CONVERSION_ROOTS=/data"
],
"Cmd": [
"/usr/local/bin/entrypoint.sh"
],
"Healthcheck": {
"Test": [
"CMD-SHELL",
"python -c \"import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1/healthz', timeout=4).status==200 else 1)\" || exit 1"
],
"Interval": 30000000000,
"Timeout": 5000000000,
"StartPeriod": 5000000000,
"Retries": 3
},
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.opencontainers.image.created": "2026-09-24T09:33:10.438Z",
"org.opencontainers.image.description": "A lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. It runs in the web browser, on the desktop, on mobile, and inside Jupyter notebooks.",
"org.opencontainers.image.licenses": "MIT",
"org.opencontainers.image.revision": "68598ba40dcc295e40d5e952f3c25b0cafa644c0",
"org.opencontainers.image.source": "https://github.com/opengeos/GeoLibre",
"org.opencontainers.image.title": "GeoLibre",
"org.opencontainers.image.url": "https://github.com/opengeos/GeoLibre",
"org.opencontainers.image.version": "main"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1048438170,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/952c81c7fc762f305cd0b529677023a26869e6ffdf3a98d611fd143aefb46f5b/diff:/var/lib/docker/overlay2/8e55a1b0767a7d6b89c0d38706ac4f49f83d671a8807ed8c66d8b662a588bfd1/diff:/var/lib/docker/overlay2/0afb50ba84db083bdda53c9207bffe479a00e318ee9029a4770aeda62d9784c3/diff:/var/lib/docker/overlay2/e49d51bc99e13f1eb3e0ab346e15c5ae33a2d2de6f3c4624b1c94725518d1f13/diff:/var/lib/docker/overlay2/4bbc7832e9928c32f48d6a2f9159ad123c654f4714d5256225062901e747df9c/diff:/var/lib/docker/overlay2/a9a000ee8726d717a2b6854c0b1684f01095eed88ffc81fcd57f2f65a89debf3/diff:/var/lib/docker/overlay2/0ee6d59944d32c3e82e7f72bc7295198c407bcab6f4208cc6eaf3aa21d56110d/diff:/var/lib/docker/overlay2/f432148a85abf3e3c59e90cfd99c78ab98cc693feeffbbb41aa848657570756c/diff:/var/lib/docker/overlay2/b68aad1ef419ad27e62b959a1e290460892e822c461511c281efd65b814ea74e/diff:/var/lib/docker/overlay2/41a611570818878600778187c42c9336435674ae94738c6256879abf42045607/diff:/var/lib/docker/overlay2/a1f1c90507a4830a173e8be14498fb42c1dd074df17a61a8b194d5f0d2cadef5/diff:/var/lib/docker/overlay2/381d7fb941448342d915f7ad323205e0d37c16ab55b7f6fd8dc73330895a60bd/diff",
"MergedDir": "/var/lib/docker/overlay2/ada75370a6abaf0786c4ece540b5fb3e8b30415bc81e733b90d0014ff1158ea5/merged",
"UpperDir": "/var/lib/docker/overlay2/ada75370a6abaf0786c4ece540b5fb3e8b30415bc81e733b90d0014ff1158ea5/diff",
"WorkDir": "/var/lib/docker/overlay2/ada75370a6abaf0786c4ece540b5fb3e8b30415bc81e733b90d0014ff1158ea5/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:34467cc93912af891dfee8a3902adf9b4f355a9bca4eaa46f658d1181a21de0d",
"sha256:16df0073c13c96653ee2b601b16e514321513eb4af983de156c2d4e17df8a5d9",
"sha256:9639007baab8a136bc468bd5d757fdf79cf5d77b6ff2a87889071252e334fab3",
"sha256:abca6d63c9dbe51fa3bc42e75e0387da12803ef64430ad151814e468d5e1c203",
"sha256:b8cb343ad67b393db9d7b85c21c82cdc3ae7e55b2effcdfb825ddde271b2064c",
"sha256:0f94b3b3ba315819b65a783be3e9654a3c70bfedf3525f0caa6fed61dcff9758",
"sha256:5039c29e78231a278cec20d3d8c34e512644bfdccdce3c63d7d72c23bda9e19b",
"sha256:cccf75e6eb242d4c2b8e4a411aa10daa98350ff65c781acf9ac5b1539f973f68",
"sha256:e6fa82cebca85b19ec7722ee2c94242d5b8bcbdac3b209faae4fba5fcb47ea38",
"sha256:df9cbaabb99051d929b3dab4e9ef4de0f5616666fef6b73266c5b39e14daf558",
"sha256:d1bd18dcd888f71b1a60ada13e513bd09bb140adac0690329c04f1ea9f85ece6",
"sha256:dc8794c138400914e270ff68b287da7d1d407919bb6623d0aa4734c9b4afa0bb",
"sha256:e1222a1000752687961ec82d19e33b3dfe966daa3b123cc825b41f78403d566e"
]
},
"Metadata": {
"LastTagTime": "2026-09-24T18:22:43.437806268+08:00"
}
}