镜像构建历史
# 2025-12-26 21:26:12 0.00B 声明容器运行时监听的端口
EXPOSE [5700/tcp]
# 2025-12-26 21:26:12 0.00B 创建挂载点用于持久化数据或共享数据
VOLUME [/ql/data]
# 2025-12-26 21:26:12 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["./docker/docker-entrypoint.sh"]
# 2025-12-26 21:26:12 0.00B 指定检查容器健康状态的命令
HEALTHCHECK &{["CMD-SHELL" "curl -sf --noproxy '*' http://127.0.0.1:5700/api/health || exit 1"] "5s" "2s" "0s" "0s" '\x14'}
# 2025-12-26 21:26:12 0.00B 设置工作目录为/ql
WORKDIR /ql
# 2025-12-26 21:26:12 0.00B 指定运行容器时使用的用户
USER root
# 2025-12-26 21:26:12 66.45MB 复制新文件或目录到容器中
COPY --chown=qinglong:qinglong /tmp/build/node_modules/. /ql/node_modules/ # buildkit
# 2025-12-26 21:24:02 3.50MB 执行命令并创建新的镜像层
RUN |7 QL_MAINTAINER=whyour QL_URL=https://github.com/whyour/qinglong.git QL_BRANCH=debian PYTHON_SHORT_VERSION=3.10 QL_UID=5432 QL_GID=5432 SOURCE_COMMIT=188b585846fbba3bf6fd446aa61d373c90537d29 /bin/sh -c pip3 install --prefix ${PYTHON_HOME} requests # buildkit
# 2025-12-26 21:22:21 0.00B 设置环境变量 PATH NODE_PATH PIP_CACHE_DIR PYTHONPATH
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/ql/data/dep_cache/node:/ql/data/dep_cache/python3/bin NODE_PATH=/usr/local/bin:/usr/local/lib/node_modules:/ql/data/dep_cache/node/global/5/node_modules PIP_CACHE_DIR=/ql/data/dep_cache/python3/pip PYTHONPATH=/ql/data/dep_cache/python3:/ql/data/dep_cache/python3/lib/python3.10:/ql/data/dep_cache/python3/lib/python3.10/site-packages
# 2025-12-26 21:22:21 0.00B 设置环境变量 PNPM_HOME PYTHON_HOME PYTHONUSERBASE
ENV PNPM_HOME=/ql/data/dep_cache/node PYTHON_HOME=/ql/data/dep_cache/python3 PYTHONUSERBASE=/ql/data/dep_cache/python3
# 2025-12-26 21:22:21 30.78MB 执行命令并创建新的镜像层
RUN |7 QL_MAINTAINER=whyour QL_URL=https://github.com/whyour/qinglong.git QL_BRANCH=debian PYTHON_SHORT_VERSION=3.10 QL_UID=5432 QL_GID=5432 SOURCE_COMMIT=188b585846fbba3bf6fd446aa61d373c90537d29 /bin/sh -c git clone --depth=1 -b ${QL_BRANCH} ${QL_URL} ${QL_DIR} && cd ${QL_DIR} && cp -f .env.example .env && chmod 777 ${QL_DIR}/shell/*.sh && chmod 777 ${QL_DIR}/docker/*.sh && git clone --depth=1 -b ${QL_BRANCH} https://github.com/${QL_MAINTAINER}/qinglong-static.git /tmp/static && mkdir -p ${QL_DIR}/static && cp -rf /tmp/static/* ${QL_DIR}/static && rm -rf /tmp/static # buildkit
# 2025-12-10 01:35:36 0.00B 定义构建参数
ARG SOURCE_COMMIT=188b585846fbba3bf6fd446aa61d373c90537d29
# 2025-12-10 01:35:36 0.00B 指定运行容器时使用的用户
USER qinglong
# 2025-12-10 01:35:36 0.00B 执行命令并创建新的镜像层
RUN |6 QL_MAINTAINER=whyour QL_URL=https://github.com/whyour/qinglong.git QL_BRANCH=debian PYTHON_SHORT_VERSION=3.10 QL_UID=5432 QL_GID=5432 /bin/sh -c mkdir -p ${QL_DIR} && chown -R ${QL_UID}:${QL_GID} ${QL_DIR} # buildkit
# 2025-12-10 01:35:35 153.12MB 执行命令并创建新的镜像层
RUN |6 QL_MAINTAINER=whyour QL_URL=https://github.com/whyour/qinglong.git QL_BRANCH=debian PYTHON_SHORT_VERSION=3.10 QL_UID=5432 QL_GID=5432 /bin/sh -c set -x && ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && apt-get update && apt-get upgrade -y && apt-get install --no-install-recommends -y git curl wget tzdata perl openssl openssh-client jq procps netcat-openbsd unzip libatomic1 && apt-get clean && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" >/etc/timezone && git config --global user.email "qinglong@users.noreply.github.com" && git config --global user.name "qinglong" && git config --global http.postBuffer 524288000 && npm install -g pnpm@8.3.1 pm2 ts-node && rm -rf /root/.cache && rm -rf /root/.npm && rm -rf /etc/apt/apt.conf.d/docker-clean && ulimit -c 0 # buildkit
# 2025-12-10 01:29:54 12.56MB 复制新文件或目录到容器中
COPY /usr/local/lib/node_modules/. /usr/local/lib/node_modules/ # buildkit
# 2025-12-10 01:29:53 105.97MB 复制新文件或目录到容器中
COPY /usr/local/bin/node /usr/local/bin/ # buildkit
# 2025-12-10 01:29:50 0.00B 设置环境变量 QL_HOME
ENV QL_HOME=/home/qinglong
# 2025-12-10 01:29:50 0.00B 设置环境变量 QL_USER
ENV QL_USER=qinglong
# 2025-12-10 01:29:50 8.93KB 执行命令并创建新的镜像层
RUN |6 QL_MAINTAINER=whyour QL_URL=https://github.com/whyour/qinglong.git QL_BRANCH=debian PYTHON_SHORT_VERSION=3.10 QL_UID=5432 QL_GID=5432 /bin/sh -c groupadd -g ${QL_GID} qinglong && useradd -m -u ${QL_UID} -g ${QL_GID} -s /bin/bash qinglong && mkdir -p /home/qinglong/bin /home/qinglong/.ssh && chmod 700 /home/qinglong/.ssh && chown -R ${QL_UID}:${QL_GID} /home/qinglong # buildkit
# 2025-12-10 01:29:50 0.00B 定义构建参数
ARG QL_GID=5432
# 2025-12-10 01:29:50 0.00B 定义构建参数
ARG QL_UID=5432
# 2025-12-10 01:29:50 0.00B 设置环境变量 QL_DIR QL_BRANCH LANG SHELL PS1
ENV QL_DIR=/ql QL_BRANCH=debian LANG=C.UTF-8 SHELL=/bin/bash PS1=\u@\h:\w $
# 2025-12-10 01:29:50 0.00B 定义构建参数
ARG PYTHON_SHORT_VERSION=3.10
# 2025-12-10 01:29:50 0.00B 定义构建参数
ARG QL_BRANCH=debian
# 2025-12-10 01:29:50 0.00B 定义构建参数
ARG QL_URL=https://github.com/whyour/qinglong.git
# 2025-12-10 01:29:50 0.00B 添加元数据标签
LABEL maintainer=whyour
# 2025-12-10 01:29:50 0.00B 定义构建参数
ARG QL_MAINTAINER=whyour
# 2025-12-09 09:11:34 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2025-12-09 09:11:34 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-12-09 09:11:34 38.63MB 执行命令并创建新的镜像层
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"; 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 install --disable-pip-version-check --no-cache-dir --no-compile 'setuptools==79.0.1' 'wheel<0.46' ; pip3 --version # buildkit
# 2025-12-09 09:01:01 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=c8f4a596572201d81dd7df91f70e177e19a70f1d489968b54b5fbbf29a97c076
# 2025-12-09 09:01:01 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.10.19
# 2025-12-09 09:01:01 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D
# 2025-12-09 09:01:01 6.48MB 执行命令并创建新的镜像层
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-12-09 09:01:01 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2025-12-09 09:01:01 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2025-12-08 08:00:00 56.54MB
# debian.sh --arch 'armhf' out/ 'bookworm' '@1765152000'
镜像信息
{
"Id": "sha256:ee4351f4222539522b74a5e61653e7eac8580a0007a843ee8d7a2db595e10722",
"RepoTags": [
"whyour/qinglong:debian-python3.10",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/whyour/qinglong:debian-python3.10-linuxarm"
],
"RepoDigests": [
"whyour/qinglong@sha256:6038c48fdd3d4daa645c13d12a17fd6922a74ea163ee13bca37e3f20d7129903",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/whyour/qinglong@sha256:0cbbe0fa4f4519ec42a59d46722cee5770c0c1d301a7e62345439e377ca4a980"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2025-12-26T13:26:12.468048496Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "root",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"5700/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/ql/data/dep_cache/node:/ql/data/dep_cache/python3/bin",
"LANG=C.UTF-8",
"GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D",
"PYTHON_VERSION=3.10.19",
"PYTHON_SHA256=c8f4a596572201d81dd7df91f70e177e19a70f1d489968b54b5fbbf29a97c076",
"QL_DIR=/ql",
"QL_BRANCH=debian",
"SHELL=/bin/bash",
"PS1=\\u@\\h:\\w $ ",
"QL_USER=qinglong",
"QL_HOME=/home/qinglong",
"PNPM_HOME=/ql/data/dep_cache/node",
"PYTHON_HOME=/ql/data/dep_cache/python3",
"PYTHONUSERBASE=/ql/data/dep_cache/python3",
"NODE_PATH=/usr/local/bin:/usr/local/lib/node_modules:/ql/data/dep_cache/node/global/5/node_modules",
"PIP_CACHE_DIR=/ql/data/dep_cache/python3/pip",
"PYTHONPATH=/ql/data/dep_cache/python3:/ql/data/dep_cache/python3/lib/python3.10:/ql/data/dep_cache/python3/lib/python3.10/site-packages"
],
"Cmd": null,
"Healthcheck": {
"Test": [
"CMD-SHELL",
"curl -sf --noproxy '*' http://127.0.0.1:5700/api/health || exit 1"
],
"Interval": 5000000000,
"Timeout": 2000000000,
"Retries": 20
},
"Image": "",
"Volumes": {
"/ql/data": {}
},
"WorkingDir": "/ql",
"Entrypoint": [
"./docker/docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"maintainer": "whyour"
}
},
"Architecture": "arm",
"Variant": "v7",
"Os": "linux",
"Size": 474037385,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/45eb4734807e56148b67fc9ef252de96bbec125cd9122a760c92ece06a72bde9/diff:/var/lib/docker/overlay2/cc08aa61430478155e323a0d0d62ba1f1c55830144bc922c7ddb9f97d89e51b1/diff:/var/lib/docker/overlay2/e7b1c53c2664755a6cc278c613ec08c536481e0244852cfbecb96420ebe84a22/diff:/var/lib/docker/overlay2/5a992f3b78abaae47c4871ed39602fe39fa861f8b48bb68c14d8b77c2d218a57/diff:/var/lib/docker/overlay2/1d7aa6222ee6335a41e796b2654f421638688166de627abd4532123eb2f1f818/diff:/var/lib/docker/overlay2/643c0a07ec13b4eb083621c303a1f41059007d24539a0556170af8bbc790c934/diff:/var/lib/docker/overlay2/6f4dbc06a84f254dcbb4d0720d6afeccac3f2c052e3d563028e66ac1e5366d83/diff:/var/lib/docker/overlay2/15b58fe4f2caa9678c7ae3c3c6266ee3925f6b6d91be07b498804a9dfbc368cb/diff:/var/lib/docker/overlay2/b3fd852c8d41c791c22325edf52565b7a8ad4a6f7a3f9c82c8ba9eab9cf88208/diff:/var/lib/docker/overlay2/7744ef4e79eb4f5a67981ef0b7d42f2410369f0f7a8cbf77f1cb0f2984dc36ec/diff:/var/lib/docker/overlay2/dd34615b575e7a4737750244edbdec1ffb2ae6ceb0cfe6a16edf5489f3637792/diff:/var/lib/docker/overlay2/d71bac92af79db7611087bf88775655e6689c4f678221f99ec4a2afe2efd2523/diff",
"MergedDir": "/var/lib/docker/overlay2/3332f7d5a1b4dc5f0e507ffc7150511e26bb56f1b2c2065eca59b3a478f3ae7d/merged",
"UpperDir": "/var/lib/docker/overlay2/3332f7d5a1b4dc5f0e507ffc7150511e26bb56f1b2c2065eca59b3a478f3ae7d/diff",
"WorkDir": "/var/lib/docker/overlay2/3332f7d5a1b4dc5f0e507ffc7150511e26bb56f1b2c2065eca59b3a478f3ae7d/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:dbb8b8b1bdb890ea308eaca968e24dd11f052931f27687c93c17be5f7c5827af",
"sha256:e1dfb247802eb0c43a22da3167af2687e7afd117574843a703d34cbb1ec9d9f2",
"sha256:4167f449d7a7ff73b6e0b081ce1a2aeebe73013b1715b2eb223b3628565b3dd1",
"sha256:8dd452800bc8301894a848f4fd4b63d373a843efa03edb8efec5fcc8a85fba44",
"sha256:17a82913f47ec35b4c7d454af2b5f9c82dfadf027f1ab9cbcb28e12edc22b309",
"sha256:6b68dbd818124141896a068b80d6b8531bec50ec2219a4deac26734134408e21",
"sha256:7f5b45dece6441f66736da0f7495629f15cd860a1c3f780e75ebad50fb8b3833",
"sha256:7ed6394e065bdcb30f0dbb3a99551ce8a847013e20788bac6a25e04797bcac3c",
"sha256:a62697ac28ab14848729b0c4a9e3d7c6bd2e601005a503def34ff59169058ab7",
"sha256:5f06c75107516f9787ec20ade7a0d421208f6df0abb221d3f9d269e67bbced36",
"sha256:6af92223053a74b7b6adaaf80c4e67c414cdf6a30fc0c9467917277aed57ec5d",
"sha256:b5148e3a52e4c888c3434567242491211d82cb23a77f8c2c5a359bf52424aee7",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
]
},
"Metadata": {
"LastTagTime": "2026-01-18T11:07:58.614975823+08:00"
}
}