镜像构建历史
# 2026-11-11 17:06:46 0.00B 设置默认要执行的命令
CMD []
# 2026-11-11 17:06:46 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["docker-entrypoint.sh"]
# 2026-11-11 17:06:46 0.00B 指定检查容器健康状态的命令
HEALTHCHECK {Test:[CMD sh -c curl -f http://localhost:${OCTOP_PORT:-8088}/api/health || exit 1] Interval:30s Timeout:10s StartPeriod:1m30s StartInterval:0s Retries:3}
# 2026-11-11 17:06:46 0.00B 声明容器运行时监听的端口
EXPOSE [8088/tcp]
# 2026-11-11 17:06:46 0.00B 执行命令并创建新的镜像层
RUN |4 PIP_INDEX_URL= PIP_TRUSTED_HOST= APT_MIRROR= OCTOP_IMAGE_VARIANT=lite /bin/sh -c mkdir -p /data/.octop # buildkit
# 2026-11-11 17:06:46 52.00B 执行命令并创建新的镜像层
RUN |4 PIP_INDEX_URL= PIP_TRUSTED_HOST= APT_MIRROR= OCTOP_IMAGE_VARIANT=lite /bin/sh -c if [ "$OCTOP_IMAGE_VARIANT" = "lite" ]; then mkdir -p /etc/octop && printf '%s\n' '{"desktop": false, "browser": false, "laya": false}' > /etc/octop/bundled-components.json; else bash /usr/local/bin/bake-desktop.sh; fi # buildkit
# 2026-11-11 17:06:46 0.00B 定义构建参数
ARG OCTOP_IMAGE_VARIANT=lite
# 2026-11-11 17:06:46 1.83MB 执行命令并创建新的镜像层
RUN |4 PIP_INDEX_URL= PIP_TRUSTED_HOST= APT_MIRROR= OCTOP_IMAGE_VARIANT=lite /bin/sh -c if [ -n "$PIP_INDEX_URL" ]; then export UV_INDEX_URL="$PIP_INDEX_URL"; if [ -n "$PIP_TRUSTED_HOST" ]; then export UV_INSECURE_HOST="$PIP_TRUSTED_HOST"; fi; fi && if [ "$OCTOP_IMAGE_VARIANT" = "lite" ]; then uv sync --frozen --no-dev --extra browser && .venv/bin/python -c "import octop"; else uv sync --frozen --no-dev --extra browser --extra desktop --extra local-embedding --extra knowledge-ocr && .venv/bin/python -c "import cv2, fastembed, huggingface_hub, mss, rapidocr, onnxruntime, pymupdf; import importlib.util; assert importlib.util.find_spec('pynput')" && apt-get update && apt-get install -y --no-install-recommends fonts-noto-cjk; fi && if dpkg -s build-essential >/dev/null 2>&1; then apt-get purge -y --auto-remove build-essential; fi && rm -rf /var/lib/apt/lists/* /tmp/* # buildkit
# 2026-11-11 17:06:43 0.00B 定义构建参数
ARG OCTOP_IMAGE_VARIANT=lite
# 2026-11-11 17:06:43 0.00B 执行命令并创建新的镜像层
RUN |4 PIP_INDEX_URL= PIP_TRUSTED_HOST= APT_MIRROR= OCTOP_IMAGE_VARIANT=lite /bin/sh -c chmod +x /usr/local/bin/docker-entrypoint.sh /usr/local/bin/bake-desktop.sh # buildkit
# 2026-11-11 17:06:43 2.04KB 复制新文件或目录到容器中
COPY docker/bake-desktop.sh /usr/local/bin/bake-desktop.sh # buildkit
# 2026-11-11 17:06:43 10.41KB 复制新文件或目录到容器中
COPY docker/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh # buildkit
# 2026-11-11 17:06:43 6.51KB 复制新文件或目录到容器中
COPY .env.example ./ # buildkit
# 2026-11-11 17:06:43 51.64MB 复制新文件或目录到容器中
COPY /build/src/octop/dashboard/ ./src/octop/dashboard/ # buildkit
# 2026-11-11 17:06:43 14.72MB 复制新文件或目录到容器中
COPY src/ ./src/ # buildkit
# 2026-11-11 17:06:43 0.00B 设置环境变量 PATH PLAYWRIGHT_BROWSERS_PATH
ENV PATH=/app/.venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
# 2026-11-11 17:06:43 1.98GB 执行命令并创建新的镜像层
RUN |4 PIP_INDEX_URL= PIP_TRUSTED_HOST= APT_MIRROR= OCTOP_IMAGE_VARIANT=lite /bin/sh -c if [ -n "$PIP_INDEX_URL" ]; then export UV_INDEX_URL="$PIP_INDEX_URL"; if [ -n "$PIP_TRUSTED_HOST" ]; then export UV_INSECURE_HOST="$PIP_TRUSTED_HOST"; fi; fi && case "$OCTOP_IMAGE_VARIANT" in full|lite) ;; *) echo "OCTOP_IMAGE_VARIANT must be full or lite" >&2; exit 1 ;; esac && apt-get update && apt-get install -y --no-install-recommends build-essential && if [ "$OCTOP_IMAGE_VARIANT" = "lite" ]; then uv sync --frozen --no-install-project --no-dev --extra browser; else uv sync --frozen --no-install-project --no-dev --extra browser --extra desktop --extra local-embedding --extra knowledge-ocr; fi && apt-get purge -y --auto-remove build-essential && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-11-11 17:06:05 983.65KB 复制新文件或目录到容器中
COPY pyproject.toml uv.lock README.md LICENSE ./ # buildkit
# 2026-11-11 17:06:05 0.00B 定义构建参数
ARG OCTOP_IMAGE_VARIANT=lite
# 2026-11-11 17:06:05 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-11-11 17:06:05 43.38MB 复制新文件或目录到容器中
COPY /uv /uvx /bin/ # buildkit
# 2026-11-11 17:06:05 76.00B 执行命令并创建新的镜像层
RUN |3 PIP_INDEX_URL= PIP_TRUSTED_HOST= APT_MIRROR= /bin/sh -c ln -sf ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && ln -sf ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx && node --version && npm --version && npx --version # buildkit
# 2026-11-11 17:06:05 11.10MB 复制新文件或目录到容器中
COPY /usr/local/lib/node_modules /usr/local/lib/node_modules # buildkit
# 2026-11-11 17:06:05 98.93MB 复制新文件或目录到容器中
COPY /usr/local/bin/node /usr/local/bin/node # buildkit
# 2026-11-11 17:05:16 324.12MB 执行命令并创建新的镜像层
RUN |3 PIP_INDEX_URL= PIP_TRUSTED_HOST= APT_MIRROR= /bin/sh -c if [ -n "$APT_MIRROR" ]; then printf 'Types: deb\nURIs: https://%s/debian\nSuites: trixie trixie-updates\nComponents: main contrib non-free non-free-firmware\n\nTypes: deb\nURIs: https://%s/debian-security\nSuites: trixie-security\nComponents: main contrib non-free non-free-firmware\n' "$APT_MIRROR" "$APT_MIRROR" > /etc/apt/sources.list.d/debian.sources; fi && apt-get update && apt-get install -y --no-install-recommends libffi-dev libgl1 libglib2.0-0 curl git postgresql-client ripgrep && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-11-11 17:05:16 0.00B 定义构建参数
ARG APT_MIRROR=
# 2026-11-11 17:05:16 0.00B 定义构建参数
ARG PIP_TRUSTED_HOST=
# 2026-11-11 17:05:16 0.00B 定义构建参数
ARG PIP_INDEX_URL=
# 2026-11-11 17:05:16 0.00B 设置环境变量 PYTHONDONTWRITEBYTECODE PYTHONUNBUFFERED HOME OCTOP_BIND_HOST OCTOP_PORT OCTOP_LOG_LEVEL UV_COMPILE_BYTECODE UV_LINK_MODE UV_PYTHON_DOWNLOADS
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 HOME=/data OCTOP_BIND_HOST=0.0.0.0 OCTOP_PORT=8088 OCTOP_LOG_LEVEL=info UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy UV_PYTHON_DOWNLOADS=never
# 2026-11-11 17:05:16 0.00B 添加元数据标签
LABEL org.opencontainers.image.licenses=MIT
# 2026-11-11 17:05:16 0.00B 添加元数据标签
LABEL org.opencontainers.image.source=https://github.com/TencentCloud/orca
# 2026-11-11 17:05:16 0.00B 添加元数据标签
LABEL org.opencontainers.image.description=Smarter self-hosted AI assistant — multi-user, multi-agent.
# 2026-11-11 17:05:16 0.00B 添加元数据标签
LABEL org.opencontainers.image.title=Octop
# 2026-11-11 17:05:16 0.00B 添加元数据标签
LABEL maintainer=OrcaKit Team
# 2026-11-05 16:00:30 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-11-05 16:00:30 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-11-05 16:00:30 36.82MB 执行命令并创建新的镜像层
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; apt-get dist-clean; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit
# 2026-11-05 15:52:18 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=b5796915dc45ff745cfb4e990a7e7c93d6f546328a102ce31448d69ebc37575c
# 2026-11-05 15:52:18 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.12.16
# 2026-11-05 15:52:18 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
# 2026-11-05 15:52:18 3.81MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; apt-get dist-clean # buildkit
# 2026-11-05 15:52:18 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-11-05 15:52:18 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-11-05 05:23:39 78.86MB
# debian.sh --arch 'amd64' out/ 'trixie' '@1793827419'
镜像信息
{
"Id": "sha256:e1a95fc662f2708243c230a2c6ad0fd20dfe3868c0f1fccfafc47884f8f196b0",
"RepoTags": [
"ghcr.io/tencentcloud/octop:1.0.3b5",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/tencentcloud/octop:1.0.3b5"
],
"RepoDigests": [
"ghcr.io/tencentcloud/octop@sha256:79fc81b18cbe1fb156588ef8cf22454f6663b2c069571d71f9ddec697e255391",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/tencentcloud/octop@sha256:21fb6c652136bb63792641e305334e5c87b09fe9b123849949b02c0d366c31d7"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-11-11T09:06:46.939315275Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8088/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/app/.venv/bin:/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.16",
"PYTHON_SHA256=b5796915dc45ff745cfb4e990a7e7c93d6f546328a102ce31448d69ebc37575c",
"PYTHONDONTWRITEBYTECODE=1",
"PYTHONUNBUFFERED=1",
"HOME=/data",
"OCTOP_BIND_HOST=0.0.0.0",
"OCTOP_PORT=8088",
"OCTOP_LOG_LEVEL=info",
"UV_COMPILE_BYTECODE=1",
"UV_LINK_MODE=copy",
"UV_PYTHON_DOWNLOADS=never",
"PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright"
],
"Cmd": null,
"Healthcheck": {
"Test": [
"CMD",
"sh",
"-c",
"curl -f http://localhost:${OCTOP_PORT:-8088}/api/health || exit 1"
],
"Interval": 30000000000,
"Timeout": 10000000000,
"StartPeriod": 90000000000,
"Retries": 3
},
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"maintainer": "OrcaKit Team",
"org.opencontainers.image.created": "2026-11-11T09:04:59.309Z",
"org.opencontainers.image.description": "A smarter, self-hosted AI assistant — multi-user, multi-agent.",
"org.opencontainers.image.licenses": "MIT",
"org.opencontainers.image.revision": "0635fe5f67c30775c50b7b3fa1995d561e2d6e96",
"org.opencontainers.image.source": "https://github.com/TencentCloud/Octop",
"org.opencontainers.image.title": "Octop",
"org.opencontainers.image.url": "https://github.com/TencentCloud/Octop",
"org.opencontainers.image.version": "1.0.3b5-amd64"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 2647878909,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/64c5eaf6a86236f273d08b06022bdaf80f922ef21e7807e5e7890db63d576baa/diff:/var/lib/docker/overlay2/4c87c54c2f08744f19d1d25e4c03f38a2c60e7c16f2535b09fc98df5c55cdcb1/diff:/var/lib/docker/overlay2/bc2900c740239dddb91cdff34795f4001eae2b7244596fb9b717b7b60136de23/diff:/var/lib/docker/overlay2/148974bb2af204d3b3ad80744346b4efe0e08a7ea562e2a82dcd1d5bb9ae286b/diff:/var/lib/docker/overlay2/3c49b452c9a425713e200e4cffaf958deadae8f4c0d0cc5dbfa115cd1a2ee4e2/diff:/var/lib/docker/overlay2/a5676a3688d323e6884ed764c18684275699dc310d22920162474bfa373a7c20/diff:/var/lib/docker/overlay2/6b7f1c0ea8a86fe9d49192f0c94501c9e1dc163c1cb5f4797477b0ef0e7256b5/diff:/var/lib/docker/overlay2/022044b3df5c923d086204e1c158d73b4d331890f75a886dbdd1e2dd0d9f8c2b/diff:/var/lib/docker/overlay2/d47184cac78c80afca44fffaf27db0dbe7ed00ec3daa6141d2c44c5713b7e011/diff:/var/lib/docker/overlay2/33de5f4c10684229747321f74fad5efb8c613f6011dd66154ac0f08f3d812a77/diff:/var/lib/docker/overlay2/c273c88a4b84226ceacbe253b48ced74c6ad30022a102e6600bc4055141247ab/diff:/var/lib/docker/overlay2/a6a3ac56eabce2c5d406eae3e1b9978de7d4d609d6ec8f1a4f9854333a5f5f4d/diff:/var/lib/docker/overlay2/93a59cbb89ee120632a2745bba1203f9d014bf618099ae7f67a602f4a016d1ea/diff:/var/lib/docker/overlay2/a95774874dca63d7a3d4c6865666060c2549c8380283bcd12f5a986d78082cce/diff:/var/lib/docker/overlay2/2ed4293e91a7ec58a81477e0d8e390f0358c2f6ffb19c6c553b20f32efc2ee8a/diff:/var/lib/docker/overlay2/7c0b52e3faed443592bc4844c4cedd21f65972b35e5bdf09ceb0cff4cef22576/diff:/var/lib/docker/overlay2/9c2a1cacfcc4d82f883c57bad0fa4fcd1b5afaf04bb9e99c330d63c60723767a/diff:/var/lib/docker/overlay2/946781cdc1e031ef1658ac483022aa71673f108b8d3dbefdbbb8c4bf224a0401/diff:/var/lib/docker/overlay2/7e51c756adf57c3e812cc6a087c6d9dac707a3f0659eb997d360194d5e31cff2/diff:/var/lib/docker/overlay2/aac50f783aa42778cd21bccfb53e18abc1f770c60dd970ff909040d0f001596a/diff",
"MergedDir": "/var/lib/docker/overlay2/a714cc116df5b08ab206cfec5cd8dd3d77a8512c7b4295f7a86c5de94571e749/merged",
"UpperDir": "/var/lib/docker/overlay2/a714cc116df5b08ab206cfec5cd8dd3d77a8512c7b4295f7a86c5de94571e749/diff",
"WorkDir": "/var/lib/docker/overlay2/a714cc116df5b08ab206cfec5cd8dd3d77a8512c7b4295f7a86c5de94571e749/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:dd57f90311a2567b55ff22eeacff1602fd04ad7566e315957731359eab173b90",
"sha256:3dc3efdf011007403514ffd3b699da9deef847535ae30a3639ef3fee93c1375e",
"sha256:96a69f98ae076bdff5264720ee922820291d658c6a2df97f7c4899864ceb7ea8",
"sha256:340931a1d98607a7f1319082179f82ba477f1a1de6e3ecf2ea11f4cc0fe454c3",
"sha256:7fc14fa363a339cca9e4eee7c5a7f8f4348eabcac8949b1c15911ed09fad017e",
"sha256:2916f586a797ffc151594b4de806d779636565400821b6f99bb850f5aa570267",
"sha256:63433c4ae3fe296741258ec58b05b3552e15477eefcab714d5b14c06aa45022f",
"sha256:c9f9a38fe343bc25b4d6c25d68fb00fbd0bba4d5d824cb164742a599c9454515",
"sha256:6f2f07b522558fc2f112434fcf113ccd9ae2f66ed3a13e335079c423dc5852a1",
"sha256:c579bf3b9c9ff47f9c2431528870337979e450d7dc4ed2a278edb6dc9b03867f",
"sha256:97d82d89bfad96febe145c02b24c840e93c1324ed709d333b456976a59aa55e3",
"sha256:954c084437ec39aba13c6b1cca2e512eb1ac4afcb7054232932de6b1dbcf9029",
"sha256:6112374b0143e6b4a24db91e2354a684e2f03875a1480166807cdf2304a183ac",
"sha256:a86a7922ebfdb6078deb42667af4b76d5097beb4a49eae96312d7da62b169201",
"sha256:4499e8573034cb93ba22d9cac868e17ccb6a86a028f66188c1385574f254d167",
"sha256:982088356dc2421a29447ffe8c035cf2fd050de21e66cf3385bac475153209f8",
"sha256:4ac0e68e6b2173fc5a77320af2c54cbfa2b09abc5da145405bf3dce6dfdc808b",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:416a4b02ff738a8c16d2aa35e0ad4a57cdd1f68fa9b93487f3bce4321545d497",
"sha256:1ad8bccd73fbddeb4926ae39694bfc52840bc23c4f40fbbf307e747aed9a68b3",
"sha256:57f009135e08127c1bcc48e8da72254780556593c153817bd9a09cd8ca6f72b1"
]
},
"Metadata": {
"LastTagTime": "2026-11-12T15:54:54.182558531+08:00"
}
}