镜像构建历史
# 2026-06-09 11:02:16 0.00B 设置默认要执行的命令
CMD ["python" "run.py"]
# 2026-06-09 11:02:16 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/app/entrypoint.sh"]
# 2026-06-09 11:02:16 0.00B 声明容器运行时监听的端口
EXPOSE [8123/tcp]
# 2026-06-09 11:02:16 11.05MB 执行命令并创建新的镜像层
RUN |6 HTTP_PROXY= HTTPS_PROXY= NO_PROXY= http_proxy= https_proxy= no_proxy= /bin/sh -c python <<'EOF'
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 构建字体缓存
fm._load_fontmanager(try_read_cache=False)
# 配置中文字体
font_candidates = ['Noto Sans CJK SC', 'Noto Sans CJK JP', 'Noto Sans CJK TC']
# 检查 Symbola 字体是否可用
symbola_available = any('Symbola' in f.name for f in fm.fontManager.ttflist)
if symbola_available:
font_candidates.append('Symbola')
font_candidates.append('DejaVu Sans')
plt.rcParams['font.sans-serif'] = font_candidates
plt.rcParams['axes.unicode_minus'] = False
# 创建一个图来触发完整的初始化
fig, ax = plt.subplots()
ax.set_title('Font cache warmup')
plt.close(fig)
print('Matplotlib font cache warmed up successfully')
EOF # buildkit
# 2026-06-09 11:02:14 0.00B 执行命令并创建新的镜像层
RUN |6 HTTP_PROXY= HTTPS_PROXY= NO_PROXY= http_proxy= https_proxy= no_proxy= /bin/sh -c chmod +x /app/entrypoint.sh # buildkit
# 2026-06-09 11:02:14 158.97KB 复制新文件或目录到容器中
COPY . . # buildkit
# 2026-06-09 11:02:14 403.08MB 执行命令并创建新的镜像层
RUN |6 HTTP_PROXY= HTTPS_PROXY= NO_PROXY= http_proxy= https_proxy= no_proxy= /bin/sh -c export HTTP_PROXY="${HTTP_PROXY}" HTTPS_PROXY="${HTTPS_PROXY}" http_proxy="${http_proxy}" https_proxy="${https_proxy}" NO_PROXY="${NO_PROXY}" no_proxy="${no_proxy}" && _p="${HTTP_PROXY:-${http_proxy:-}}"; _sp="${HTTPS_PROXY:-${https_proxy:-}}"; if [ -n "${_p}" ]; then echo "Acquire::http::Proxy \"${_p}\";" > /etc/apt/apt.conf.d/99proxy ; echo "Acquire::https::Proxy \"${_sp}\";" >> /etc/apt/apt.conf.d/99proxy ; fi && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && apt-get install -y --no-install-recommends nodejs && rm -rf /var/lib/apt/lists/* && rm -f /etc/apt/apt.conf.d/99proxy && npm install -g pnpm vercel --no-audit --no-fund && npm cache clean --force && rm -rf /root/.npm # buildkit
# 2026-06-09 11:01:49 603.81MB 复制新文件或目录到容器中
COPY /install /usr/local # buildkit
# 2026-06-09 11:01:38 246.34MB 执行命令并创建新的镜像层
RUN |6 HTTP_PROXY= HTTPS_PROXY= NO_PROXY= http_proxy= https_proxy= no_proxy= /bin/sh -c export HTTP_PROXY="${HTTP_PROXY}" HTTPS_PROXY="${HTTPS_PROXY}" http_proxy="${http_proxy}" https_proxy="${https_proxy}" NO_PROXY="${NO_PROXY}" no_proxy="${no_proxy}" && _p="${HTTP_PROXY:-${http_proxy:-}}"; _sp="${HTTPS_PROXY:-${https_proxy:-}}"; if [ -n "${_p}" ]; then echo "Acquire::http::Proxy \"${_p}\";" > /etc/apt/apt.conf.d/99proxy ; echo "Acquire::https::Proxy \"${_sp}\";" >> /etc/apt/apt.conf.d/99proxy ; fi && apt-get update && apt-get install -y --no-install-recommends libpng16-16 libjpeg62-turbo libglib2.0-0 libxml2 libxslt1.1 fontconfig fonts-noto-cjk fonts-symbola sudo curl gnupg git zip unzip vim-tiny nano less procps htop && rm -rf /var/lib/apt/lists/* && rm -f /etc/apt/apt.conf.d/99proxy && groupadd -g 1000 shipyard && useradd -u 1000 -g shipyard -d /workspace -s /bin/bash shipyard && mkdir -p /workspace && chown shipyard:shipyard /workspace && chmod 755 /workspace && echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && echo "Defaults:root !requiretty" >> /etc/sudoers && echo "shipyard ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && echo '# Basic shell configuration for shipyard user' > /workspace/.bashrc && echo "export PS1='\\u@shipyard:\\w\\$ '" >> /workspace/.bashrc && echo 'export PATH=/usr/local/bin:/usr/bin:/bin' >> /workspace/.bashrc && echo 'export HOME=/workspace' >> /workspace/.bashrc && echo 'cd /workspace' >> /workspace/.bashrc && chown shipyard:shipyard /workspace/.bashrc && chmod 644 /workspace/.bashrc # buildkit
# 2026-06-09 11:01:24 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-06-09 11:01:24 0.00B 定义构建参数
ARG no_proxy
# 2026-06-09 11:01:24 0.00B 定义构建参数
ARG https_proxy
# 2026-06-09 11:01:24 0.00B 定义构建参数
ARG http_proxy
# 2026-06-09 11:01:24 0.00B 定义构建参数
ARG NO_PROXY
# 2026-06-09 11:01:24 0.00B 定义构建参数
ARG HTTPS_PROXY
# 2026-06-09 11:01:24 0.00B 定义构建参数
ARG HTTP_PROXY
# 2026-05-20 07:50:49 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-05-20 07:50:49 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-05-20 07:50:49 36.51MB 执行命令并创建新的镜像层
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
# 2026-05-20 07:41:15 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=2ab91ff401783ccca64f75d10c882e957bdfd60e2bf5a72f8421793729b78a71
# 2026-05-20 07:41:15 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.13.13
# 2026-05-20 07:41:15 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
# 2026-05-20 07:41:15 9.26MB 执行命令并创建新的镜像层
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-05-20 07:41:15 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-05-18 08:00:00 74.83MB
# debian.sh --arch 'amd64' out/ 'bookworm' '@1779062400'
镜像信息
{
"Id": "sha256:c883932f282a32e1a25fef63c807e51c3d826d3193dd386c55996f2211fe167d",
"RepoTags": [
"ghcr.io/astrbotdevs/shipyard-neo-ship:latest",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/astrbotdevs/shipyard-neo-ship:latest"
],
"RepoDigests": [
"ghcr.io/astrbotdevs/shipyard-neo-ship@sha256:733677213f6e937f6a12a5828600d8ca0fd18d90d80af2dcadd31c834181dd1b",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/astrbotdevs/shipyard-neo-ship@sha256:55d5229dd69de0ee4fc0d09b1de4bb5468181c79c96a0918ba6a73b5423b802f"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-06-09T03:02:16.297859404Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8123/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305",
"PYTHON_VERSION=3.13.13",
"PYTHON_SHA256=2ab91ff401783ccca64f75d10c882e957bdfd60e2bf5a72f8421793729b78a71"
],
"Cmd": [
"python",
"run.py"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": [
"/app/entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"org.opencontainers.image.created": "2026-06-09T03:01:20.283Z",
"org.opencontainers.image.description": "The Secure, Persistent Execution Platform for AI Agents",
"org.opencontainers.image.licenses": "AGPL-3.0",
"org.opencontainers.image.revision": "88b095f93d32b880f4238a45940aec6d4165e176",
"org.opencontainers.image.source": "https://github.com/AstrBotDevs/shipyard-neo",
"org.opencontainers.image.title": "shipyard-neo",
"org.opencontainers.image.url": "https://github.com/AstrBotDevs/shipyard-neo",
"org.opencontainers.image.version": "0.4.0"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1385027015,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/9febb27ef19cb92d525a8b694893d071621ad96f2a9f07c9077ac788b9409baf/diff:/var/lib/docker/overlay2/cc6fa3a7936e5c6c3b0472d0cebce85b5c75163afebf6dafb6bf97283f0478b1/diff:/var/lib/docker/overlay2/b2c4cb3075e2e96525d46733ad9cf0819f9970bbd1e8abca853cd0fb8fbc48ed/diff:/var/lib/docker/overlay2/623b6aa8b7a8e04d5c96ea01313752b650897d735dc5d7d8798d3f52e5bb82ff/diff:/var/lib/docker/overlay2/42462fd5bb1e99569190e67a9f0416eb639f8162ed6235ae24a4491ca70f2270/diff:/var/lib/docker/overlay2/85287c4bca6fa10edf2294ead6b27e9264d0b6c1aab4b7d7f91b4b79dca1e7c3/diff:/var/lib/docker/overlay2/2d2182aaa67582bad00b9116558154c30d14a5fcb5a0354d524afc7d5d8fd3ef/diff:/var/lib/docker/overlay2/f84847e661e5dca5b9d5e3cbf1b81ca53d22dc4ca6c1da42b9ba528c36de98b4/diff:/var/lib/docker/overlay2/4f11bea908f3731f996b596b99f1f0ce04b7b875061bb2b87ed393c8391b8c46/diff:/var/lib/docker/overlay2/f31bfa56a7a89043b8b344f0b40dd25ed8ef40dde9d94740552e14f9bd2c73ab/diff",
"MergedDir": "/var/lib/docker/overlay2/e0c660fcc97c7dfe75840376843e2a2dd2adc62bbc2f6715c1ad1198a1e7317a/merged",
"UpperDir": "/var/lib/docker/overlay2/e0c660fcc97c7dfe75840376843e2a2dd2adc62bbc2f6715c1ad1198a1e7317a/diff",
"WorkDir": "/var/lib/docker/overlay2/e0c660fcc97c7dfe75840376843e2a2dd2adc62bbc2f6715c1ad1198a1e7317a/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:b2008ac19409fa6fee4b52596271400498aebd0be04dffac5351bd1dcf230f2a",
"sha256:7a1171735f8e5ec6b178069c8a9120820a5d5acae5813fbc66c81c6d821609fa",
"sha256:09c914c62d6db278df1e2b9742a362358a1eea58a3c79ebf5165e841c43af0a4",
"sha256:bde35fec470b676d9ff4993991c7d7e62bb61a6b557d818c434d50b72f545983",
"sha256:83120ce3e4f9032deb06eb2d57c310a065a49f21bb522637540b1cde7893cc7b",
"sha256:2d9b731b7301b621d73eb06d6fb8fb57efc0375ef03df7f895e81441ed5a45d6",
"sha256:9e5896b75b6bd2f3996886a0bb451925d40ffed5eae639660e407f4929e606a9",
"sha256:0ce83077edb6fe92847e611f012b6c679adad768eec6b0b76cb1fdeaf085e7dd",
"sha256:8bce86985d74a626456225fb6d5b41cad20fd00660aa9ac3dbbf5718b1992211",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:211542c89629d8e495837cdc6b522b666a637f610ccc56342f820a7074e3961c"
]
},
"Metadata": {
"LastTagTime": "2026-07-01T10:13:31.24491036+08:00"
}
}