镜像构建历史
# 2025-10-13 22:40:30 0.00B 设置默认要执行的命令
CMD ["pnpm" "start"]
# 2025-10-13 22:40:30 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
# 2025-10-13 22:40:30 0.00B 声明容器运行时监听的端口
EXPOSE [3000/tcp]
# 2025-10-13 22:40:30 1.44KB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c chmod +x /usr/local/bin/entrypoint.sh # buildkit
# 2025-10-13 22:40:30 1.44KB 复制新文件或目录到容器中
COPY entrypoint.sh /usr/local/bin/entrypoint.sh # buildkit
# 2025-10-13 22:40:30 7.74MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c pnpm frontend:build && pnpm build # buildkit
# 2025-10-13 22:40:12 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-10-13 22:40:12 6.04MB 复制新文件或目录到容器中
COPY . . # buildkit
# 2025-10-13 22:40:11 608.36MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c pnpm install # buildkit
# 2025-10-13 22:39:59 301.93KB 复制新文件或目录到容器中
COPY package.json pnpm-lock.yaml ./ # buildkit
# 2025-10-13 22:39:59 0.00B 设置工作目录为/app
WORKDIR /app
# 2025-10-13 22:39:59 50.15MB 执行命令并创建新的镜像层
RUN |1 INSTALL_EXT=false /bin/sh -c uv tool install mcp-server-fetch # buildkit
# 2025-10-13 22:39:58 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; apt-get update && apt-get install -y ca-certificates curl iptables && install -m 0755 -d /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && chmod a+r /etc/apt/keyrings/docker.asc && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io && apt-get clean && rm -rf /var/lib/apt/lists/*; fi # buildkit
# 2025-10-13 22:39:58 0.00B 定义构建参数
ARG INSTALL_EXT=false
# 2025-10-13 22:39:58 60.37MB 执行命令并创建新的镜像层
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-10-13 22:39:58 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-10-13 22:39:58 0.00B 设置环境变量 PNPM_HOME
ENV PNPM_HOME=/usr/local/share/pnpm
# 2025-10-13 22:39:56 28.23MB 执行命令并创建新的镜像层
RUN /bin/sh -c npm install -g pnpm # buildkit
# 2025-10-13 22:39:54 332.26MB 执行命令并创建新的镜像层
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-10-13 22:39:38 50.43MB 复制新文件或目录到容器中
COPY /uv /uvx /bin/ # buildkit
# 2025-10-08 01:53:11 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2025-10-08 01:53:11 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-10-08 01:53:11 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-10-08 01:53:11 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=b9910730526b298299b46b35595ced9055722df60c06ad6301f6a4e2c728a252
# 2025-10-08 01:53:11 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.13.8
# 2025-10-08 01:53:11 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
# 2025-10-08 01:53:11 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-10-08 01:53:11 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2025-09-29 08:00:00 74.81MB
# debian.sh --arch 'amd64' out/ 'bookworm' '@1759104000'
镜像信息
{
"Id": "sha256:9e408602410ab2f95fa3f9d04da1464a3f878665da984bde878e54f73c8f6638",
"RepoTags": [
"samanhappy/mcphub:0.9.14",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/samanhappy/mcphub:0.9.14"
],
"RepoDigests": [
"samanhappy/mcphub@sha256:d0ba8755edfde889d80f5009ed6ea6154b428ea47a73f7b9ba09c656ad761f7c",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/samanhappy/mcphub@sha256:91ada2415ed60c2dd97bce04a96117c0dd28dd0b9320e003b3148dcbc0127d9a"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2025-10-13T14:40:30.961790664Z",
"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.8",
"PYTHON_SHA256=b9910730526b298299b46b35595ced9055722df60c06ad6301f6a4e2c728a252",
"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-10-13T14:39:30.946Z",
"org.opencontainers.image.description": "A unified hub for centralized management and dynamic organization of multiple MCP servers/APIs into streamable HTTP (SSE) endpoints, with support for flexible routing strategies",
"org.opencontainers.image.licenses": "Apache-2.0",
"org.opencontainers.image.revision": "3e9e5cc3c976b380146003369049eb61188ccb0d",
"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.14"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1267207428,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/0142b1b15fa83291f129337e54ab786999f864fc329da6b841ad61b0cc14a8be/diff:/var/lib/docker/overlay2/4a873efe6020776c89cdd708f497fec8ee0d59f7e6296bd58c4be0005aa911b8/diff:/var/lib/docker/overlay2/472ff5308a9f69eb7f50d8168b83a4fceba89e276266f1c0a8378364faec1214/diff:/var/lib/docker/overlay2/2cf1e62d11fe206aff25fda85f4b0586b70b701f5d72652ff87a01de0e03e7c7/diff:/var/lib/docker/overlay2/50a1563c9e65c5a8162a724feca75ffad2ecd115572a0a32fcffa6830056666c/diff:/var/lib/docker/overlay2/04e64dd59bac576e7ec2909a46a4098e1f47d6d85ff90cc53d89c436366529aa/diff:/var/lib/docker/overlay2/8e21029217af5ea52ae565b92bcf247eb080dc3fdaab8b7fb6560be0a6feb24e/diff:/var/lib/docker/overlay2/a87ebfedb3d043efb11d1aca4a7b43fa75c24a447b9336e73c32cc1961fbc1f1/diff:/var/lib/docker/overlay2/d54d8d282d4d79481ab69330162c2bb79a3555bd38c3d4c0977e2ed921591d5b/diff:/var/lib/docker/overlay2/0506e34b55e3ab788eed8a1c851d5c3a5f0901871c73e2a57a1e1df07745928d/diff:/var/lib/docker/overlay2/bd613a2e83f9265a5b75c7e8fd708ade052fb3b27f4f63efa0d340945159355d/diff:/var/lib/docker/overlay2/1a56158df6897aba9ee371b235cec2b6e949e248c36ed6e87a1233d63c84f1c9/diff:/var/lib/docker/overlay2/1019e6978abac6d9179238d357f581e79447b82ccd2f68534c35f106b8bfaf8f/diff:/var/lib/docker/overlay2/58b72879de71502cb596d8b88c68e035f963a88175f2543c6aeba35df5b88a48/diff:/var/lib/docker/overlay2/d203f2505afcfaf16bdf4ec23d54765092346af376851c180721144b0bf19e18/diff:/var/lib/docker/overlay2/2750bfa6ae379216b2c7bee18c77feb866a84f4bfa6b1e15b505297b678cf281/diff:/var/lib/docker/overlay2/0af95756526e4a09e674bbaf3b540959266526c68701b6bc0f7f43100f6305b4/diff",
"MergedDir": "/var/lib/docker/overlay2/d7d4f58159674882b9e609c0bf208f2e6ae13da23588bb0ee104851b441cd5bc/merged",
"UpperDir": "/var/lib/docker/overlay2/d7d4f58159674882b9e609c0bf208f2e6ae13da23588bb0ee104851b441cd5bc/diff",
"WorkDir": "/var/lib/docker/overlay2/d7d4f58159674882b9e609c0bf208f2e6ae13da23588bb0ee104851b441cd5bc/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:aca83606673032726b42f8e1396ceb979c32bfb26b602732baf699053e46b33e",
"sha256:6440792f899d7f7adef9141133acdff1d732446d7259cca0e08115c65e14acfe",
"sha256:f9688aa978ce95aa629481919f8ef9bf3d65fe1f409b7aa598d42c594f8606a5",
"sha256:65185d483fc089ee74e57d7165a42a10d74be448c77033bb8c07b00855e8678e",
"sha256:2a5444d52a4aadc3624b02b24514f73b5bea00cc843fa8e442cf855833071848",
"sha256:b74a857f471522cc35457167d6f254aa185dd1cf6160842dadfa732ff876ccce",
"sha256:d39820e318228b444f33daa305dbc5ee2a5ec647cee74080438482ef315e4d49",
"sha256:74336b4638cad44f01f6379d98fee995a6403aff2784208e678d15fa8198e553",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:18f70011a25a1034111c0d64e1efb80b4c05bb8d5db5f22e9d573cde6f764440",
"sha256:0a78e3c80bd5aa2b6df5bf46f84dfa706b03465cf71eddb5eb4c50ccc7186d5b",
"sha256:baa6e8de100e7a7afbd3be659a5933338b97da7e0affa3fa96a7350ed0d25368",
"sha256:6b7d4ce3dbf7124172e902509a003768bb3f85945cf5a52dae533bc30f90868c",
"sha256:dc45931cdd92e6df52fe92b5fb5da4c8f23489cebdf3ebf6f8486c0e2c999bc7",
"sha256:ba10a95ccae370f28e45b75afc1c1cba6a7189313347c8b50827828d30422cc8",
"sha256:385754974e30ecfc56bbfe2ba9bab0d52241b6fb4eb5935298d32f0f202b0978",
"sha256:a10b9858fa8ae73744db431d9a52daa9ac1e4942d8d4703715fc0b0bb8c11085",
"sha256:fb1e1a3dbee28a5b879593da750bf88d4bf61ba1496c5f597471604c6719a632"
]
},
"Metadata": {
"LastTagTime": "2025-10-14T17:56:55.561951305+08:00"
}
}