镜像构建历史
# 2026-06-06 00:20:23 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/entrypoint.sh"]
# 2026-06-06 00:20:23 0.00B 指定检查容器健康状态的命令
HEALTHCHECK &{["CMD-SHELL" "sh -c 'if python -c \"import json,sys; data=json.load(open(\\\"/data/tls/config.json\\\")); sys.exit(0 if data.get(\\\"enabled\\\") else 1)\" 2>/dev/null; then port=$(python -c \"import json; print(json.load(open(\\\"/data/tls/config.json\\\")).get(\\\"port\\\") or \\\"${LANLENS_PORT:-7765}\\\")\"); curl -kfs \"https://localhost:${port}/api/health\"; else curl -fs \"http://localhost:${LANLENS_PORT:-7765}/api/health\"; fi || exit 1'"] "30s" "10s" "20s" "0s" '\x03'}
# 2026-06-06 00:20:23 0.00B 声明容器运行时监听的端口
EXPOSE map[7765/tcp:{}]
# 2026-06-06 00:20:23 0.00B 设置环境变量 DB_PATH SECRET_KEY LANLENS_SECRET_KEY_FILE DEFAULT_ADMIN_PASSWORD LANLENS_PORT BACKEND_PORT TZ PYTHONPATH PYTHONUNBUFFERED PYTHONDONTWRITEBYTECODE
ENV DB_PATH=/data/lanlens.db SECRET_KEY= LANLENS_SECRET_KEY_FILE=/data/secret_key DEFAULT_ADMIN_PASSWORD=admin LANLENS_PORT=7765 BACKEND_PORT=17765 TZ=UTC PYTHONPATH=/app PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1
# 2026-06-06 00:20:23 0.00B 创建挂载点用于持久化数据或共享数据
VOLUME [/data]
# 2026-06-06 00:20:23 62.00B 执行命令并创建新的镜像层
RUN |5 LANLENS_APP_VERSION=1.5.6 LANLENS_BUILD_CODE=1.5.6 LANLENS_BUILD_COMMIT=62adc57 LANLENS_BUILD_BRANCH=main LANLENS_BUILD_CREATED=2026-06-05T16:19:22Z /bin/sh -c printf '#!/bin/sh\nexec python /app/backend/cli/reset_password.py "$@"\n' > /usr/local/bin/reset-password && chmod +x /usr/local/bin/reset-password # buildkit
# 2026-06-06 00:20:23 10.95KB 执行命令并创建新的镜像层
RUN |5 LANLENS_APP_VERSION=1.5.6 LANLENS_BUILD_CODE=1.5.6 LANLENS_BUILD_COMMIT=62adc57 LANLENS_BUILD_BRANCH=main LANLENS_BUILD_CREATED=2026-06-05T16:19:22Z /bin/sh -c chmod +x /entrypoint.sh /usr/local/bin/render-lanlens-nginx # buildkit
# 2026-06-06 00:20:23 4.87KB 复制新文件或目录到容器中
COPY scripts/render-nginx-config.sh /usr/local/bin/render-lanlens-nginx # buildkit
# 2026-06-06 00:20:23 6.08KB 复制新文件或目录到容器中
COPY scripts/entrypoint.sh /entrypoint.sh # buildkit
# 2026-06-06 00:20:23 1.69KB 复制新文件或目录到容器中
COPY nginx/nginx.conf /etc/nginx/nginx.conf # buildkit
# 2026-06-06 00:20:23 803.35KB 复制新文件或目录到容器中
COPY /app/frontend/dist /app/frontend/dist # buildkit
# 2026-06-06 00:20:23 129.00B 执行命令并创建新的镜像层
RUN |5 LANLENS_APP_VERSION=1.5.6 LANLENS_BUILD_CODE=1.5.6 LANLENS_BUILD_COMMIT=62adc57 LANLENS_BUILD_BRANCH=main LANLENS_BUILD_CREATED=2026-06-05T16:19:22Z /bin/sh -c printf 'APP_VERSION = "%s"\nBUILD_CODE = "%s"\nBUILD_COMMIT = "%s"\nBUILD_BRANCH = "%s"\nBUILD_CREATED = "%s"\n' "$LANLENS_APP_VERSION" "$LANLENS_BUILD_CODE" "$LANLENS_BUILD_COMMIT" "$LANLENS_BUILD_BRANCH" "$LANLENS_BUILD_CREATED" > /app/backend/version.py # buildkit
# 2026-06-06 00:20:23 2.42MB 复制新文件或目录到容器中
COPY backend/ /app/backend/ # buildkit
# 2026-06-06 00:20:23 325.00B 复制新文件或目录到容器中
COPY backend/requirements.txt /app/backend/requirements.txt # buildkit
# 2026-06-06 00:20:23 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-06-06 00:20:23 274.91MB 执行命令并创建新的镜像层
RUN |5 LANLENS_APP_VERSION=1.5.6 LANLENS_BUILD_CODE=1.5.6 LANLENS_BUILD_COMMIT=62adc57 LANLENS_BUILD_BRANCH=main LANLENS_BUILD_CREATED=2026-06-05T16:19:22Z /bin/sh -c apt-get update && apt-get install -y --no-install-recommends nginx nmap iputils-ping snmp libpcap-dev libpcap0.8 net-tools iproute2 curl gcc python3-dev && rm -f /etc/nginx/sites-enabled/default && pip install --no-cache-dir --upgrade pip && pip install --no-cache-dir -r /tmp/requirements.txt && apt-get purge -y --auto-remove gcc python3-dev && rm -rf /var/lib/apt/lists/* /tmp/requirements.txt # buildkit
# 2026-06-05 05:58:47 325.00B 复制新文件或目录到容器中
COPY backend/requirements.txt /tmp/requirements.txt # buildkit
# 2026-06-05 05:58:47 0.00B 添加元数据标签
LABEL org.opencontainers.image.title=LanLens org.opencontainers.image.description=Self-hosted network monitoring dashboard org.opencontainers.image.version=1.5.6 org.opencontainers.image.revision=62adc57 org.opencontainers.image.created=2026-06-05T16:19:22Z org.opencontainers.image.licenses=MIT AND GPL-2.0-only AND GPL-3.0-only AND LGPL-2.1-only AND Apache-2.0 org.opencontainers.image.source=https://github.com/AlexRosbach/LanLens
# 2026-06-05 05:58:47 0.00B 定义构建参数
ARG LANLENS_BUILD_CREATED=unknown
# 2026-06-05 05:58:47 0.00B 定义构建参数
ARG LANLENS_BUILD_BRANCH=unknown
# 2026-06-05 05:58:47 0.00B 定义构建参数
ARG LANLENS_BUILD_COMMIT=unknown
# 2026-06-05 05:58:47 0.00B 定义构建参数
ARG LANLENS_BUILD_CODE=dev
# 2026-06-05 05:58:47 0.00B 定义构建参数
ARG LANLENS_APP_VERSION=1.5.6
# 2026-05-20 07:50:55 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-05-20 07:50:55 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:55 36.77MB 执行命令并创建新的镜像层
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; apt-get dist-clean; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit
# 2026-05-20 07:42:40 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684
# 2026-05-20 07:42:40 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.12.13
# 2026-05-20 07:42:40 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
# 2026-05-20 07:42:40 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-05-20 07:42:40 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-05-20 07:42:40 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 78.62MB
# debian.sh --arch 'amd64' out/ 'trixie' '@1779062400'
镜像信息
{
"Id": "sha256:eee3739c5e7609f11659d96c9fef5e2b8bf08016ff87f30a355065806fa01ca6",
"RepoTags": [
"alexrosbach/lanlens:latest",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/alexrosbach/lanlens:latest"
],
"RepoDigests": [
"alexrosbach/lanlens@sha256:7735eb2221e15c0d01122c6f8e24ac8b583f47e9fab46d77a0d6cb2018be8788",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/alexrosbach/lanlens@sha256:fb9f8ce3e13df3941057b1cd6257b53ca4d5f09afbbf612ee5d11eef651c2e08"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-06-05T18:20:23.842322728+02:00",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"7765/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/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.13",
"PYTHON_SHA256=c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684",
"DB_PATH=/data/lanlens.db",
"SECRET_KEY=",
"LANLENS_SECRET_KEY_FILE=/data/secret_key",
"DEFAULT_ADMIN_PASSWORD=admin",
"LANLENS_PORT=7765",
"BACKEND_PORT=17765",
"TZ=UTC",
"PYTHONPATH=/app",
"PYTHONUNBUFFERED=1",
"PYTHONDONTWRITEBYTECODE=1"
],
"Cmd": null,
"Healthcheck": {
"Test": [
"CMD-SHELL",
"sh -c 'if python -c \"import json,sys; data=json.load(open(\\\"/data/tls/config.json\\\")); sys.exit(0 if data.get(\\\"enabled\\\") else 1)\" 2\u003e/dev/null; then port=$(python -c \"import json; print(json.load(open(\\\"/data/tls/config.json\\\")).get(\\\"port\\\") or \\\"${LANLENS_PORT:-7765}\\\")\"); curl -kfs \"https://localhost:${port}/api/health\"; else curl -fs \"http://localhost:${LANLENS_PORT:-7765}/api/health\"; fi || exit 1'"
],
"Interval": 30000000000,
"Timeout": 10000000000,
"StartPeriod": 20000000000,
"Retries": 3
},
"Image": "",
"Volumes": {
"/data": {}
},
"WorkingDir": "/app",
"Entrypoint": [
"/entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"org.opencontainers.image.created": "2026-06-05T16:19:22Z",
"org.opencontainers.image.description": "Self-hosted network monitoring dashboard",
"org.opencontainers.image.licenses": "MIT AND GPL-2.0-only AND GPL-3.0-only AND LGPL-2.1-only AND Apache-2.0",
"org.opencontainers.image.revision": "62adc57",
"org.opencontainers.image.source": "https://github.com/AlexRosbach/LanLens",
"org.opencontainers.image.title": "LanLens",
"org.opencontainers.image.version": "1.5.6"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 397364620,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/82ab954d0b8f7e3cb640baf89c4191e1d5f7730d51b7551936bbb0b5fdbb575f/diff:/var/lib/docker/overlay2/fb1c19d024eb544e73cf4b38a69ec2178a7f1e66a8f94ba4a96990bc3e4436c5/diff:/var/lib/docker/overlay2/019bed62370ff1edad8bd9de2c1039d81b81cb40beedb8c691baf1c4540d45fa/diff:/var/lib/docker/overlay2/9d8e8a16358e027d126edc519df9dd157e0846ee953a09b874b5bb42c121053e/diff:/var/lib/docker/overlay2/0047400f129f0be807ccebed26b254302b07ca9ed2d86277bcc4aac498f119f8/diff:/var/lib/docker/overlay2/6afc7ca0ad961960d2939133f29e332fcce96a833c90ee6fcb633ddd5bab0526/diff:/var/lib/docker/overlay2/256f27a63bd0a26bc88c2512c456d714f980d501d1069498749c86305805a5d2/diff:/var/lib/docker/overlay2/ce5d82d3b587db501bac13183839a404b5a8dd5ba3b49dd062127d3fb1907139/diff:/var/lib/docker/overlay2/1e6c91165f837e1d21d0b2b1c2980e43dac91c627112a98830c2d93b401b86bc/diff:/var/lib/docker/overlay2/7f043c73a055df5719c0b9f3130203c55b93fb1703bda0613f0ad478105d7983/diff:/var/lib/docker/overlay2/ae72f968e3c4e90a114c1936fe1e20a273f1785b16d0b13fa366007b5d494c0b/diff:/var/lib/docker/overlay2/09d195989b8dc3f927cf3dd2b04810f0105dcedf2d837b4f776b0bf2400a7f6f/diff:/var/lib/docker/overlay2/f7264f56ae2c8610cdc40dbee4357b065f3f22206a64db45fea85f6d3ab33655/diff:/var/lib/docker/overlay2/06ae6141483b04e74f43d56a1191e370eee3ea20bf992631ab82b808c8b2daff/diff:/var/lib/docker/overlay2/cd0bbc9c69e026633d38a0c4693c779a3d10a0542c78032cd6cc9dbe54fe597d/diff",
"MergedDir": "/var/lib/docker/overlay2/1d17fe6d4b4bfe39fe3b98c2c511f69f87371b6fa7729816fc3303f68ee6f45a/merged",
"UpperDir": "/var/lib/docker/overlay2/1d17fe6d4b4bfe39fe3b98c2c511f69f87371b6fa7729816fc3303f68ee6f45a/diff",
"WorkDir": "/var/lib/docker/overlay2/1d17fe6d4b4bfe39fe3b98c2c511f69f87371b6fa7729816fc3303f68ee6f45a/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:219a998c60509502b47b97f1158067d5dd62640d2d689560d32cfd5594f6bc40",
"sha256:ae0096d57d7f18e7861848f1103983488102f78517c11444120d8a938884de54",
"sha256:c529e1b2553946dcc9afa2d77e33a75f23d3702e0b4a7911b67e2f1fe45a4939",
"sha256:6872606a6b819a8348189e0d99b8e730aa74d558c158d96f1dd2406a7c6baaf7",
"sha256:a96c84484d6d0ad4038622773957a9f0825304ec6a853e634cbe6b8548c402ee",
"sha256:d7c8a789cbf34db0c502d8211da5a252cff57b808ee054f24f100e942bf96b20",
"sha256:2df0733b43654c5270b252bb7a7c6daa5747b64e5235333b3333404ddbceb81d",
"sha256:990100bf48343f4176a9bbc695fa1e6edacb008a19b0631c191e9dc7e8608aa2",
"sha256:a98d63ab7f783b7c2744bcae2eca3145f4cf3115c617a516859e10adaf9cf1ce",
"sha256:22ca77e7ea44139e17b7fca7d4670e53de1029aaa2f723518dda4b432b17b34a",
"sha256:a35980a16f1b838a68ae02e002c96bcff926062a7cf40a0dc9f4cc7ba21f523a",
"sha256:46754c03fdcc679be0cd51c0d687fa6300a966048c36d3c17599cd8aa64c7881",
"sha256:9919982a9ce0d4b3f82b5cf658cda89958bc173bc0653bc6397cc1ae9673830f",
"sha256:0f0cf30ba130dc9814370633f9543db439d8bfc1bded767346292f9a0c98d694",
"sha256:4ddf051f9ac43d2079dc8a1ae8c49c9c1b935e847232739b0c58ccca86c5f384",
"sha256:1823da63429a96b2318e29d62d7891eecc902e7bb670cb6ba8529afaeac8fdda"
]
},
"Metadata": {
"LastTagTime": "2026-06-10T07:32:38.445815047+08:00"
}
}