镜像构建历史
# 2026-02-03 18:25:38 0.00B 设置默认要执行的命令
CMD ["nginx" "-g" "daemon off;"]
# 2026-02-03 18:25:38 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/bin/bash" "/entrypoint.sh"]
# 2026-02-03 18:25:38 0.00B 指定运行容器时使用的用户
USER penpot:penpot
# 2026-02-03 18:25:38 408.02MB 执行命令并创建新的镜像层
RUN |1 BUNDLE_PATH=./bundle-frontend/ /bin/sh -c chown -R 1001:0 /var/cache/nginx; chmod -R g+w /var/cache/nginx; chown -R 1001:0 /etc/nginx; chmod -R g+w /etc/nginx; chown -R 1001:0 /var/www; chmod -R g+w /var/www; # buildkit
# 2026-02-03 18:25:20 1.61KB 复制新文件或目录到容器中
COPY ./files/nginx-entrypoint.sh /entrypoint.sh # buildkit
# 2026-02-03 18:25:20 2.16KB 复制新文件或目录到容器中
COPY ./files/nginx-external-locations.conf /etc/nginx/overrides/location.d/external-locations.conf # buildkit
# 2026-02-03 18:25:20 5.41KB 复制新文件或目录到容器中
COPY ./files/nginx-mime.types /etc/nginx/mime.types # buildkit
# 2026-02-03 18:25:20 55.00B 复制新文件或目录到容器中
COPY ./files/nginx-resolvers.conf.template /tmp/resolvers.conf.template # buildkit
# 2026-02-03 18:25:19 4.61KB 复制新文件或目录到容器中
COPY ./files/nginx.conf.template /tmp/nginx.conf.template # buildkit
# 2026-02-03 18:25:19 50.00B 复制新文件或目录到容器中
COPY ./files/config.js /var/www/app/js/config.js # buildkit
# 2026-02-03 18:25:19 408.01MB 复制新文件或目录到容器中
COPY ./bundle-frontend/ /var/www/app/ # buildkit
# 2026-01-16 03:03:33 0.00B 定义构建参数
ARG BUNDLE_PATH=./bundle-frontend/
# 2026-01-16 03:03:33 4.55KB 执行命令并创建新的镜像层
RUN /bin/sh -c set -ex; useradd -U -M -u 1001 -s /bin/false -d /opt/penpot penpot; mkdir -p /opt/data/assets; chown -R penpot:penpot /opt/data; mkdir -p /etc/nginx/overrides/main.d/; mkdir -p /etc/nginx/overrides/http.d/; mkdir -p /etc/nginx/overrides/server.d/; mkdir -p /etc/nginx/overrides/assets.d/; mkdir -p /etc/nginx/overrides/location.d/; # buildkit
# 2026-01-16 03:03:33 0.00B 指定运行容器时使用的用户
USER root
# 2026-01-16 03:03:33 0.00B 添加元数据标签
LABEL maintainer=Penpot <docker@penpot.app>
# 2025-10-10 07:29:38 0.00B 设置默认要执行的命令
CMD ["nginx" "-g" "daemon off;"]
# 2025-10-10 07:29:38 0.00B 指定运行容器时使用的用户
USER 101
# 2025-10-10 07:29:38 0.00B 设置停止容器时发送的系统调用信号
STOPSIGNAL SIGQUIT
# 2025-10-10 07:29:38 0.00B 声明容器运行时监听的端口
EXPOSE [8080/tcp]
# 2025-10-10 07:29:38 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/docker-entrypoint.sh"]
# 2025-10-10 07:29:38 4.62KB 复制新文件或目录到容器中
COPY 30-tune-worker-processes.sh /docker-entrypoint.d # buildkit
# 2025-10-10 07:29:38 3.01KB 复制新文件或目录到容器中
COPY 20-envsubst-on-templates.sh /docker-entrypoint.d # buildkit
# 2025-10-10 07:29:38 389.00B 复制新文件或目录到容器中
COPY 15-local-resolvers.envsh /docker-entrypoint.d # buildkit
# 2025-10-10 07:29:38 2.13KB 复制新文件或目录到容器中
COPY 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d # buildkit
# 2025-10-10 07:29:38 1.62KB 复制新文件或目录到容器中
COPY docker-entrypoint.sh / # buildkit
# 2025-10-10 07:29:38 13.86KB 执行命令并创建新的镜像层
RUN |2 UID=101 GID=101 /bin/sh -c sed -i 's,listen 80;,listen 8080;,' /etc/nginx/conf.d/default.conf && sed -i '/user nginx;/d' /etc/nginx/nginx.conf && sed -i 's,\(/var\)\{0\,1\}/run/nginx.pid,/tmp/nginx.pid,' /etc/nginx/nginx.conf && sed -i "/^http {/a \ proxy_temp_path /tmp/proxy_temp;\n client_body_temp_path /tmp/client_temp;\n fastcgi_temp_path /tmp/fastcgi_temp;\n uwsgi_temp_path /tmp/uwsgi_temp;\n scgi_temp_path /tmp/scgi_temp;\n" /etc/nginx/nginx.conf && sed -i 's,PIDFILE=${PIDFILE:-/run/nginx.pid},PIDFILE=${PIDFILE:-/tmp/nginx.pid},' /etc/init.d/nginx && chown -R $UID:0 /var/cache/nginx && chmod -R g+w /var/cache/nginx && chown -R $UID:0 /etc/nginx && chmod -R g+w /etc/nginx # buildkit
# 2025-10-10 07:29:37 117.56MB 执行命令并创建新的镜像层
RUN |2 UID=101 GID=101 /bin/sh -c set -x && groupadd --system --gid $GID nginx || true && useradd --system --gid nginx --no-create-home --home /nonexistent --comment "nginx user" --shell /bin/false --uid $UID nginx || true && apt-get update && apt-get install --no-install-recommends --no-install-suggests -y gnupg1 ca-certificates && NGINX_GPGKEYS="573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 8540A6F18833A80E9C1653A42FD21310B49F6B46 9E9BE90EACBCDE69FE9B204CBCDCD8A38D88A2B3"; NGINX_GPGKEY_PATH=/etc/apt/keyrings/nginx-archive-keyring.gpg; export GNUPGHOME="$(mktemp -d)"; found=''; for NGINX_GPGKEY in $NGINX_GPGKEYS; do for server in hkp://keyserver.ubuntu.com:80 pgp.mit.edu ; do echo "Fetching GPG key $NGINX_GPGKEY from $server"; gpg1 --batch --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; done; test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; done; gpg1 --batch --export $NGINX_GPGKEYS > "$NGINX_GPGKEY_PATH" ; rm -rf "$GNUPGHOME"; apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* && dpkgArch="$(dpkg --print-architecture)" && nginxPackages=" nginx=${NGINX_VERSION}-${PKG_RELEASE} nginx-module-xslt=${NGINX_VERSION}-${DYNPKG_RELEASE} nginx-module-geoip=${NGINX_VERSION}-${DYNPKG_RELEASE} nginx-module-image-filter=${NGINX_VERSION}-${DYNPKG_RELEASE} nginx-module-njs=${NGINX_VERSION}+${NJS_VERSION}-${NJS_RELEASE} " && case "$dpkgArch" in amd64|arm64) echo "deb [signed-by=$NGINX_GPGKEY_PATH] https://nginx.org/packages/mainline/debian/ bookworm nginx" >> /etc/apt/sources.list.d/nginx.list && apt-get update ;; *) tempDir="$(mktemp -d)" && chmod 777 "$tempDir" && savedAptMark="$(apt-mark showmanual)" && apt-get update && apt-get install --no-install-recommends --no-install-suggests -y curl devscripts equivs git libxml2-utils lsb-release xsltproc && ( cd "$tempDir" && REVISION="${NGINX_VERSION}-${PKG_RELEASE}" && REVISION=${REVISION%~*} && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${REVISION}.tar.gz && PKGOSSCHECKSUM="43ecd667d9039c9ab0fab9068c16b37825b15f7d4ef6ea8f36a41378bdf1a198463c751f8b76cfe2aef7ffa8dd9f88f180b958a8189d770258b5a97dc302daf4 *${REVISION}.tar.gz" && if [ "$(openssl sha512 -r ${REVISION}.tar.gz)" = "$PKGOSSCHECKSUM" ]; then echo "pkg-oss tarball checksum verification succeeded!"; else echo "pkg-oss tarball checksum verification failed!"; exit 1; fi && tar xzvf ${REVISION}.tar.gz && cd pkg-oss-${REVISION} && cd debian && for target in base module-geoip module-image-filter module-njs module-xslt; do make rules-$target; mk-build-deps --install --tool="apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes" debuild-$target/nginx-$NGINX_VERSION/debian/control; done && make base module-geoip module-image-filter module-njs module-xslt ) && apt-mark showmanual | xargs apt-mark auto > /dev/null && { [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; } && ls -lAFh "$tempDir" && ( cd "$tempDir" && dpkg-scanpackages . > Packages ) && grep '^Package: ' "$tempDir/Packages" && echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list && apt-get -o Acquire::GzipIndexes=false update ;; esac && apt-get install --no-install-recommends --no-install-suggests -y $nginxPackages gettext-base curl && apt-get remove --purge --auto-remove -y && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx.list && if [ -n "$tempDir" ]; then apt-get purge -y --auto-remove && rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; fi && ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log && mkdir /docker-entrypoint.d # buildkit
# 2025-10-10 07:29:37 0.00B 定义构建参数
ARG GID=101
# 2025-10-10 07:29:37 0.00B 定义构建参数
ARG UID=101
# 2025-10-10 07:29:37 0.00B 设置环境变量 DYNPKG_RELEASE
ENV DYNPKG_RELEASE=1~bookworm
# 2025-10-10 07:29:37 0.00B 设置环境变量 PKG_RELEASE
ENV PKG_RELEASE=1~bookworm
# 2025-10-10 07:29:37 0.00B 设置环境变量 NJS_RELEASE
ENV NJS_RELEASE=1~bookworm
# 2025-10-10 07:29:37 0.00B 设置环境变量 NJS_VERSION
ENV NJS_VERSION=0.9.1
# 2025-10-10 07:29:37 0.00B 设置环境变量 NGINX_VERSION
ENV NGINX_VERSION=1.29.1
# 2025-10-10 07:29:37 0.00B 添加元数据标签
LABEL maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>
# 2025-09-29 08:00:00 74.81MB
# debian.sh --arch 'amd64' out/ 'bookworm' '@1759104000'
镜像信息
{
"Id": "sha256:a3f2f6b9779a8cecd73b5ce590414cd25a6823558c83e7261fd5ceaa29253452",
"RepoTags": [
"penpotapp/frontend:2.13.0",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/penpotapp/frontend:2.13.0"
],
"RepoDigests": [
"penpotapp/frontend@sha256:145aee7789906a80b140b89257cc7910ea62d7cba8c6bbeb85142e6fe83f5094",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/penpotapp/frontend@sha256:e286e2f0dbbf2fc2f831e60f6e76189a735dc020016f583d1d23fc17d3617ce0"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-02-03T10:25:38.955190397Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "penpot:penpot",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8080/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.29.1",
"NJS_VERSION=0.9.1",
"NJS_RELEASE=1~bookworm",
"PKG_RELEASE=1~bookworm",
"DYNPKG_RELEASE=1~bookworm"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/bin/bash",
"/entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"bundle_version": "2.13.0",
"maintainer": "Penpot \u003cdocker@penpot.app\u003e",
"org.opencontainers.image.created": "2026-02-03T10:24:15.804Z",
"org.opencontainers.image.description": "Penpot: The open-source design tool for design and code collaboration",
"org.opencontainers.image.licenses": "MPL-2.0",
"org.opencontainers.image.revision": "7d09d930fe00cb94987a7d622a668ee81984ba02",
"org.opencontainers.image.source": "https://github.com/penpot/penpot",
"org.opencontainers.image.title": "penpot",
"org.opencontainers.image.url": "https://github.com/penpot/penpot",
"org.opencontainers.image.version": "2.13.0"
},
"StopSignal": "SIGQUIT"
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1008444078,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/d7915166f43a08f36b64f88919f2237896f88d66ec4e0ef07df758b783eb5e9b/diff:/var/lib/docker/overlay2/d04be62fcec061f05e4ee63c442f4ee228f3210cbd0834ed1fe4cd78c3feb6cc/diff:/var/lib/docker/overlay2/d7db5b45e2c6a1adbb4d76f127160061fe918733f224af8622c0919954f2ed19/diff:/var/lib/docker/overlay2/f2df3739aa817753031f99dd92d0e40a09b91780a1facb46d150d6b6ef2ccac0/diff:/var/lib/docker/overlay2/308054b0e5103f414b92979e225c2dff42bd702a02a5f84830737cf44ab94793/diff:/var/lib/docker/overlay2/32b4f5eb10d02be4f573834adc9e516058e6fdeb894e935716b10d7f321aaa9a/diff:/var/lib/docker/overlay2/4acbacf60d33a9ba6d882931a28f222b1758483a300b838519cd276b7ca20312/diff:/var/lib/docker/overlay2/3347e100d763dccb2cf8928c737756a85b7c5bf6f79afb8fe0f9c3970f081682/diff:/var/lib/docker/overlay2/cb8c13611ac9fd268b53cfc10728fb822b57f3a2c9192931c8f89826a39a1b81/diff:/var/lib/docker/overlay2/03d89c62f36e154ba762ff2c7b7d1d225887c62df2ba6a122914f7f5b6e919f8/diff:/var/lib/docker/overlay2/fc718d8fcb90d92ba230203cdb53363627d8c5695275d11dcebc2eb5b222eab4/diff:/var/lib/docker/overlay2/ef2466f26c9bb88656bbbb7ad186aa37ec370a3240b4f6967c96c8b08e56ae4e/diff:/var/lib/docker/overlay2/1f8e0677e1f88155ca98b2d407f9c3593fd10ebadd40128bf27b2653a55e7a4c/diff:/var/lib/docker/overlay2/e90fe099f73396355c4d0b906c7cd8729388cc28426b4868a1dbf70409758017/diff:/var/lib/docker/overlay2/62dad7836c806623ee8e88cdf1328b593d9b210c039626d9893b63fce4d07adf/diff:/var/lib/docker/overlay2/e73feeccef4676e57481f73fa809f1d4d0c526eb781e5b25d810d44142177d71/diff",
"MergedDir": "/var/lib/docker/overlay2/55e0eb3f235c928420aab4ca18b083b724f5ef1b4e43557750b42db51e7178f1/merged",
"UpperDir": "/var/lib/docker/overlay2/55e0eb3f235c928420aab4ca18b083b724f5ef1b4e43557750b42db51e7178f1/diff",
"WorkDir": "/var/lib/docker/overlay2/55e0eb3f235c928420aab4ca18b083b724f5ef1b4e43557750b42db51e7178f1/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:aca83606673032726b42f8e1396ceb979c32bfb26b602732baf699053e46b33e",
"sha256:2047c57fb117dacd442e6ce3fdc32289f6cb8825727c40f49a7c1ad46bf4dfb0",
"sha256:1427529dccaa7cc3fbb11cb581e4b5d1372bf3a5cda29dc72783a7cdfe4881c7",
"sha256:77cd50ede5255418d1098edd0f6055b836a07e246995a79e74dcdfca08e10b75",
"sha256:6bfe38cadb38c9e3a4514a5ba65271ed96017030396655db0ef4abfb10f300fd",
"sha256:78827a1f9391ac18f592a271c4c1b277e96a604deb96fd9db91ef3bbda83421b",
"sha256:6b285282286cc44a2b18d7c743195831520c1630c511f288a8cc615aab9b9703",
"sha256:229dd6386f4826862b2870bca4e3ce350a4eb80560110ceded9062a4ea7ef365",
"sha256:50b6fa0a95afe6247117979194acada195c88679c5cb7c26431f6799cc649686",
"sha256:d5430b5a9032af084633b66e54c74c4b1943ba8da65c8c43cc8ebc94a09b63a5",
"sha256:db63b9957272fe7a15197f46b91a3c819d3100505e2e440cff7e973306ee7de1",
"sha256:0735226a9d9c0135b9b0ef62237d74dc672890243aed8a400177d2a67c414e93",
"sha256:d1c0e9455cbca8f0a448c168193eb52bafa02bd8c60652ed1c23c86cebc97bf3",
"sha256:0add67420ca52de9aa753cbaf388477a25a548faee7db6d2ccaa1c967044828b",
"sha256:022bc90a5cde739916b43ce34cbf78e8e33c34de8eb9e7f40aed4a6041b0694c",
"sha256:7dae9035863973806a1e0cf83f60f5ae8fff3b7188bfd3125536574826625932",
"sha256:a87d08294d29c3f0933d4587f0e75b48f80b4301279d85db587655ec3a2481fa"
]
},
"Metadata": {
"LastTagTime": "2026-02-06T11:15:06.209086613+08:00"
}
}