镜像构建历史
# 2025-08-21 16:27:42 0.00B 设置默认要执行的命令
CMD ["pnpm" "start"]
# 2025-08-21 16:27:42 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
# 2025-08-21 16:27:42 0.00B 声明容器运行时监听的端口
EXPOSE map[3000/tcp:{}]
# 2025-08-21 16:27:42 578.00B 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c chmod +x /usr/local/bin/entrypoint.sh # buildkit
# 2025-08-21 16:27:42 578.00B 复制新文件或目录到容器中
COPY entrypoint.sh /usr/local/bin/entrypoint.sh # buildkit
# 2025-08-21 16:27:42 7.42MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c pnpm frontend:build && pnpm build # buildkit
# 2025-08-21 16:24:45 2.97MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c curl -s -f --connect-timeout 10 https://mcpm.sh/api/servers.json -o servers.json || echo "Failed to download servers.json, using bundled version" # buildkit
# 2025-08-21 16:24:44 9.47MB 复制新文件或目录到容器中
COPY . . # buildkit
# 2025-08-21 16:24:44 789.12MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c pnpm install # buildkit
# 2025-08-21 16:23:36 287.50KB 复制新文件或目录到容器中
COPY package.json pnpm-lock.yaml ./ # buildkit
# 2025-08-21 16:23:36 0.00B 设置工作目录为/app
WORKDIR /app
# 2025-08-21 16:23:36 49.31MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c uv tool install mcp-server-fetch # buildkit
# 2025-08-21 16:23:31 0.00B 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c if [ "$INSTALL_EXT" = "true" ]; then ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then npx -y playwright install --with-deps chrome; else echo "Skipping Chrome installation on non-amd64 architecture: $ARCH"; fi; fi # buildkit
# 2025-08-21 16:23:30 0.00B 定义构建参数
ARG INSTALL_EXT=false
# 2025-08-21 16:23:30 70.32MB 执行命令并创建新的镜像层
RUN /bin/sh -c mkdir -p $PNPM_HOME && pnpm add -g @amap/amap-maps-mcp-server @playwright/mcp@latest tavily-mcp@latest @modelcontextprotocol/server-github @modelcontextprotocol/server-slack # buildkit
# 2025-08-21 16:23:30 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/share/pnpm:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2025-08-21 16:23:30 0.00B 设置环境变量 PNPM_HOME
ENV PNPM_HOME=/usr/local/share/pnpm
# 2025-08-21 16:23:09 28.40MB 执行命令并创建新的镜像层
RUN /bin/sh -c npm install -g pnpm # buildkit
# 2025-08-21 16:22:59 324.83MB 执行命令并创建新的镜像层
RUN /bin/sh -c apt-get update && apt-get install -y curl gnupg git && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && apt-get install -y nodejs && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit
# 2025-08-21 16:20:53 38.79MB 复制新文件或目录到容器中
COPY /uv /uvx /bin/ # buildkit
# 2025-08-15 05:49:23 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2025-08-15 05:49:23 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
# 2025-08-15 05:49:23 39.48MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev 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
# 2025-08-15 05:49:23 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=5462f9099dfd30e238def83c71d91897d8caa5ff6ebc7a50f14d4802cdaaa79a
# 2025-08-15 05:49:23 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.13.7
# 2025-08-15 05:49:23 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
# 2025-08-15 05:49:23 9.25MB 执行命令并创建新的镜像层
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
# 2025-08-15 05:49:23 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2025-08-11 08:00:00 97.21MB
# debian.sh --arch 'arm64' out/ 'bookworm' '@1754870400'
镜像信息
{
"Id": "sha256:572b65f191b4cf676d4f478f3fe23fb3251ce4dfc07c9ba60e14c8c103a042ba",
"RepoTags": [
"samanhappy/mcphub:latest",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/samanhappy/mcphub:latest-linuxarm64"
],
"RepoDigests": [
"samanhappy/mcphub@sha256:7adf483793c0e142b9b9d3d8b0cfb9bebcef1b3b1b46da5b495555c5f892d4a5",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/samanhappy/mcphub@sha256:2284c98e0c3b08f84d6c7ae076ff42cc543785b1012dc1f06362222a2bea01c5"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2025-08-21T08:27:42.597899697Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3000/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/share/pnpm:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305",
"PYTHON_VERSION=3.13.7",
"PYTHON_SHA256=5462f9099dfd30e238def83c71d91897d8caa5ff6ebc7a50f14d4802cdaaa79a",
"PNPM_HOME=/usr/local/share/pnpm"
],
"Cmd": [
"pnpm",
"start"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": [
"/usr/local/bin/entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"org.opencontainers.image.created": "2025-08-21T08:20:49.335Z",
"org.opencontainers.image.description": "A unified hub for centralized management and dynamic organization of multiple MCP servers into streamable HTTP (SSE) endpoints, with support for flexible routing strategies",
"org.opencontainers.image.licenses": "Apache-2.0",
"org.opencontainers.image.revision": "4547ae526a3f44b2099c98b64b4ecee95299358f",
"org.opencontainers.image.source": "https://github.com/samanhappy/mcphub",
"org.opencontainers.image.title": "mcphub",
"org.opencontainers.image.url": "https://github.com/samanhappy/mcphub",
"org.opencontainers.image.version": "0.9.2"
}
},
"Architecture": "arm64",
"Os": "linux",
"Size": 1466863834,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/c4657c74422e8b97613f7adc79024eb8e3b1be77541a8323f14e5f3657a540a8/diff:/var/lib/docker/overlay2/bb770fa0233f285cff2a5e82cb76a3ebdccf778d8e887e35411b79e11e6105ab/diff:/var/lib/docker/overlay2/fcd37e7d1fd6436fc2e82f643235de7dcc48aedc6fe0aeef713c1f058ace8f76/diff:/var/lib/docker/overlay2/9b4a811cca1736da7ddaacb9b9d1d9b822d90093f5ca11858a50ba2f4dba175d/diff:/var/lib/docker/overlay2/d8e17183e44e0bf25175721e9120ec12232fee8192df718dfd6069064817bcb6/diff:/var/lib/docker/overlay2/b05b3996685eb373fe99ad89ab89bc6379e806cdbd613f37b99d49c5d0bdb01b/diff:/var/lib/docker/overlay2/8c8979289813621c680530a4588053e4b021d4be380815bcbb81ad1d4ca1601d/diff:/var/lib/docker/overlay2/adb1cd4c951ff81d565973f5a008744f6bf9bd1e4b9e3c034b98ffb80c744ba0/diff:/var/lib/docker/overlay2/f0f656a26b8efd310728eeca92e180f068e6f6782ed4be8d95cba01b5723214d/diff:/var/lib/docker/overlay2/a14ecef2dc4694c5a5d72c87f54f89e75161cb63058e5d881bd161b7b14b6b0d/diff:/var/lib/docker/overlay2/b6fa24819cbdeb15ffd4c8fb2b0e4440effb82bc19c2d0a7c5d69bcdd480f13e/diff:/var/lib/docker/overlay2/467c3bd1f9a6d7d079b9ece31a5f83ca9ca778d218d4aa1077d70b8b30dfdff8/diff:/var/lib/docker/overlay2/827b76288d6b59447f9ee4403d2c387668a3b56181b83fe5075a1bf3426d19bf/diff:/var/lib/docker/overlay2/67f3ba9d6dd0e711f4d3b65b646fbb763533df703d2f68989d3aa5f0d2a411a5/diff:/var/lib/docker/overlay2/88194f777108315b4cdb622df9c67182d915b7cdcf8f170e68bee91e3ebb7ee9/diff:/var/lib/docker/overlay2/9e377d7176ed17adcc08c71776713ce9f8aa955952665d789b0a1bac0253fe07/diff:/var/lib/docker/overlay2/8d368a16e1b2d60cd8d37234aea63a34e6677643db57e728b2420eecffe445b8/diff",
"MergedDir": "/var/lib/docker/overlay2/cea1eaedcaa05adc2ad9372de696e68c223283456771f92a234a6e8468c39e34/merged",
"UpperDir": "/var/lib/docker/overlay2/cea1eaedcaa05adc2ad9372de696e68c223283456771f92a234a6e8468c39e34/diff",
"WorkDir": "/var/lib/docker/overlay2/cea1eaedcaa05adc2ad9372de696e68c223283456771f92a234a6e8468c39e34/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:f0f023a634822e4d1dacfa8dfd82bee43b4e781c712de7cf9bcf60f0d2784d6a",
"sha256:9ead39bfdc0f3a9951b7ba6a35fdbf451f8967fb316ef91388f7df0c1850edce",
"sha256:cff779c8c465fd87301479122498d08e6a3629d708a315d630cccf8f9bcd3625",
"sha256:3791d50f969ac6169a6667c15ebcb50fb6b30fe1557896472cff1e88175d971e",
"sha256:d51139649bf524b85f956dba8989050096807c1fe65995716e870118018bdbee",
"sha256:fa35d61b2341f464a3c31976b57544b759dee229c4aa4b3fb579aacc09711010",
"sha256:3eebb94416e973bcfa68b3b675ee06cbd838643ea4131bf85d9eba8055d8db6f",
"sha256:6f38fd6837c2bd47f0d219fb75a191feb02dc6fe9184a0f0a7a2091b2aa2f691",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:bbaf4c26aa345a82f82d3e3f8110592368783ccd0af45091b5bc99bd00efef60",
"sha256:3366ccb341e03d3e1ca577f454b5ea7b0baa7ef3051ca960b84b8cce13686804",
"sha256:060039963bb19f4dbf04baebc9161d6f2a5ac4797ffc424a37510a85afc1f952",
"sha256:859eac95437c88610e392cf8417c8b35bc31186b30e8f924d3e97f7ee156432f",
"sha256:32e35156f9d67ac063fc177f68c9fbebb70d7d627667fa360066099743b78f60",
"sha256:4f08b8a4eec02085f0d296070c4c608fd931dbca703d96e6ba31e1036755472b",
"sha256:56866970021c64f0d7c8a62eef805162c0b1a7b08dc4d99630ad5101a3c77816",
"sha256:d5c5eca2430f32fcc742a670937efb932f57b0dfc451d3d66471defea08f0bca",
"sha256:646ed570bb13d4098118fde04d3ecba6b4eb54bf841de36e76076c08ca180282"
]
},
"Metadata": {
"LastTagTime": "2025-08-22T17:11:16.293098696+08:00"
}
}