镜像构建历史
# 2025-08-24 16:11:56 0.00B 设置默认要执行的命令
CMD ["pnpm" "start"]
# 2025-08-24 16:11:56 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
# 2025-08-24 16:11:56 0.00B 声明容器运行时监听的端口
EXPOSE map[3000/tcp:{}]
# 2025-08-24 16:11:56 578.00B 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c chmod +x /usr/local/bin/entrypoint.sh # buildkit
# 2025-08-24 16:11:56 578.00B 复制新文件或目录到容器中
COPY entrypoint.sh /usr/local/bin/entrypoint.sh # buildkit
# 2025-08-24 16:11:56 7.42MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c pnpm frontend:build && pnpm build # buildkit
# 2025-08-24 16:11:38 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-24 16:11:38 5.79MB 复制新文件或目录到容器中
COPY . . # buildkit
# 2025-08-24 16:11:37 832.40MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c pnpm install # buildkit
# 2025-08-24 16:11:23 287.50KB 复制新文件或目录到容器中
COPY package.json pnpm-lock.yaml ./ # buildkit
# 2025-08-24 16:11:23 0.00B 设置工作目录为/app
WORKDIR /app
# 2025-08-24 16:11:23 49.04MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c uv tool install mcp-server-fetch # buildkit
# 2025-08-24 16:11:22 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-24 16:11:22 0.00B 定义构建参数
ARG INSTALL_EXT=false
# 2025-08-24 16:11:22 70.38MB 执行命令并创建新的镜像层
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-24 16:11:22 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-24 16:11:22 0.00B 设置环境变量 PNPM_HOME
ENV PNPM_HOME=/usr/local/share/pnpm
# 2025-08-24 16:11:19 28.40MB 执行命令并创建新的镜像层
RUN /bin/sh -c npm install -g pnpm # buildkit
# 2025-08-24 16:11:18 320.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-24 16:11:03 45.61MB 复制新文件或目录到容器中
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 36.27MB 执行命令并创建新的镜像层
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 74.81MB
# debian.sh --arch 'amd64' out/ 'bookworm' '@1754870400'
镜像信息
{
"Id": "sha256:83e172169fd3d42405c9f9e16c812a61d0ab8e6624526b6bd2cdf59b40603d42",
"RepoTags": [
"samanhappy/mcphub:0.9.3",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/samanhappy/mcphub:0.9.3"
],
"RepoDigests": [
"samanhappy/mcphub@sha256:cd2a0fb3517b0e28e5ef0a0e0d356e5004a4f7fb174a248566598aebeb4a54a2",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/samanhappy/mcphub@sha256:540d22cea5ef431ad0ab0984f5f0a926296ffcef061cc31424f1cd2610caf9a7"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2025-08-24T08:11:56.517934067Z",
"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-24T08:10:58.754Z",
"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": "9300814994847883a1ef684d2d2811434d8c593b",
"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.3"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1483457939,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/bb6bf91f824fd0fba0c3abf58c28ce2a7252308c1247e736a076f3befa0297e2/diff:/var/lib/docker/overlay2/fb35de1693ae474ad59f3f8a35c8c5c118ba4d78da853b9c0e3af708d7294d7b/diff:/var/lib/docker/overlay2/d72fb85a887e46972ad6f30e11ae2927002be6ad87eb4b30a6221636333a591e/diff:/var/lib/docker/overlay2/f083dd65921cce8255ee45f4b1048323ae86837c7eb02fdef28bab59c43b11dc/diff:/var/lib/docker/overlay2/ca699346cdfff1253d6a475f1f6075a15e5bbd71afa36aabdb73d29fc9d5b0ac/diff:/var/lib/docker/overlay2/4d91dbc02fc4f01737c59d393f7bff2a6f8c1a09a0fcbff471fa39fcdb7e2a18/diff:/var/lib/docker/overlay2/bed1c2bbc05dc38af7a4356fb6dbd6a8e465c88e3c074308b87646ec6926c5a1/diff:/var/lib/docker/overlay2/c2b9a31df860de0ae151b3a7ce40b6be17416d33766b8e59be62470592cace78/diff:/var/lib/docker/overlay2/aeb0d1fd2d25b535a1dabd55f47c1b69ed6cf973538bec1b19068c746b57d26e/diff:/var/lib/docker/overlay2/b24ac2aad8edaba3379b75202d3d751f08fb0d6a83de75541b72bda9f7f0039c/diff:/var/lib/docker/overlay2/212c95f0a3ae0d315b50bc1f63d99b580f811f175842f05c44aa1e167316684d/diff:/var/lib/docker/overlay2/e18cd264996e023aeb6b3e916e4c12b369362a6986ba2f60e62dde8da4c4c943/diff:/var/lib/docker/overlay2/05b3e9f34fa7b63b5691e8d1c8568f8b6b617083ea8e054f6f26be3eb01f21d4/diff:/var/lib/docker/overlay2/091d4dc8a34defd9d817224c8916bd98986bfd8b4ad8b92216487633d256bbd2/diff:/var/lib/docker/overlay2/514880a89f6ba17543a868a7df18f4b44e29857c5c21a33ab18313991f8140e0/diff:/var/lib/docker/overlay2/5765edabf0421b02ec220cf95528df7e7677b3614c7b6491ddc3cb232c84b978/diff:/var/lib/docker/overlay2/290eb6ac57e6dfc054ed31dd0ef054e499c396af9d5cbcb44bb77944ae96e92d/diff",
"MergedDir": "/var/lib/docker/overlay2/b75656a3289805851be96f53b63b851048b4afdc824b69854f2a7641d9b9cf23/merged",
"UpperDir": "/var/lib/docker/overlay2/b75656a3289805851be96f53b63b851048b4afdc824b69854f2a7641d9b9cf23/diff",
"WorkDir": "/var/lib/docker/overlay2/b75656a3289805851be96f53b63b851048b4afdc824b69854f2a7641d9b9cf23/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:eb5f13bce9936c760b9fa73aeb1b608787daa36106cc888104132e353ed37252",
"sha256:2a9c7b727490d026db269bdf2bf74ce80e17abe26fc4dd99bd53b3d1686e58dc",
"sha256:1ce62254e2a41ba52d6f4edab1c02c6733a219d0b27ff7b0d495f2987fc165ad",
"sha256:56ffb1fa8b190de199776ee5e02b4c9d482f5300e4aaa162e66fe09778c1a243",
"sha256:547fbf092a56c9f5457bfa0e4cf633466a226333bd2b426b5dece2f24c5f8915",
"sha256:56dac0dbc886b3ba0dfd809153c6799770347234c769381919c8d208c333f77d",
"sha256:1901c407a67a1aa539d8c5daccd0447c0c5705af5d873a5295f053a47523f66f",
"sha256:f91b608442a0ce441e4a6b718533b7468dd34d63f0054b5ee9fc87115752779d",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:649d8c9d5624894590fddfd7712e5c6601d9b62574a4f6d9068e1cbe10628529",
"sha256:a6996642e77eb62ee180484af1abab1a13a271b99d922818e6da2c768423fb71",
"sha256:6dc4bd91e911b0332670a576cb5fa40c91f6e433e5ebaf612b2623b462917134",
"sha256:295a757275b61e0b86ad12f294a11478d3c26d2777f45404569eb74a5a80b790",
"sha256:e3e88310ebb0ae3c01927eae90f14c4b25921109c3429608996b0db10cd72daa",
"sha256:ceda4b374f2005275bbb185d455fd4ba4c54413ce28a7d7cd111939999ad60b0",
"sha256:81c58b0d7d38235999eb790cc3db9e36cdeb9b369185072573579fef5af33659",
"sha256:960bdd4ea6fb42cf461e1b1701fdef3e2c64f5a2ee9bf84dd3d398b73e3164d5",
"sha256:036cf3b2f877e67f99e3d7bb26a493a1262705e01ef4a8688e3c8d6e615046d8"
]
},
"Metadata": {
"LastTagTime": "2025-10-01T10:28:56.004584666+08:00"
}
}