镜像构建历史
# 2026-06-11 20:58:58 0.00B 设置默认要执行的命令
CMD ["nginx" "-g" "daemon off;"]
# 2026-06-11 20:58:58 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/bin/bash" "/entrypoint.sh"]
# 2026-06-11 20:58:58 0.00B 指定运行容器时使用的用户
USER penpot:penpot
# 2026-06-11 20:58:58 227.41MB 执行命令并创建新的镜像层
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-06-11 20:58:57 2.91KB 复制新文件或目录到容器中
COPY ./files/nginx-entrypoint.sh /entrypoint.sh # buildkit
# 2026-06-11 20:58:57 2.16KB 复制新文件或目录到容器中
COPY ./files/nginx-external-locations.conf /etc/nginx/overrides/location.d/external-locations.conf # buildkit
# 2026-06-11 20:58:57 5.41KB 复制新文件或目录到容器中
COPY ./files/nginx-mime.types /etc/nginx/mime.types # buildkit
# 2026-06-11 20:58:57 248.00B 复制新文件或目录到容器中
COPY ./files/nginx-security-headers.conf /etc/nginx/nginx-security-headers.conf # buildkit
# 2026-06-11 20:58:57 348.00B 复制新文件或目录到容器中
COPY ./files/nginx-mcp-locations.conf.template /tmp/nginx-mcp-locations.conf.template # buildkit
# 2026-06-11 20:58:57 46.00B 复制新文件或目录到容器中
COPY ./files/nginx-resolvers.conf.template /tmp/resolvers.conf.template # buildkit
# 2026-06-11 20:58:57 5.47KB 复制新文件或目录到容器中
COPY ./files/nginx.conf.template /tmp/nginx.conf.template # buildkit
# 2026-06-11 20:58:57 77.00B 复制新文件或目录到容器中
COPY ./files/config.js /var/www/app/js/config.js # buildkit
# 2026-06-11 20:58:57 227.39MB 复制新文件或目录到容器中
COPY ./bundle-frontend/ /var/www/app/ # buildkit
# 2026-06-06 05:16:39 0.00B 定义构建参数
ARG BUNDLE_PATH=./bundle-frontend/
# 2026-06-06 05:16:39 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-06-06 05:16:39 0.00B 指定运行容器时使用的用户
USER root
# 2026-06-06 05:16:39 0.00B 添加元数据标签
LABEL maintainer=Penpot <docker@penpot.app>
# 2026-05-11 08:19:30 0.00B 设置默认要执行的命令
CMD ["nginx" "-g" "daemon off;"]
# 2026-05-11 08:19:30 0.00B 指定运行容器时使用的用户
USER 101
# 2026-05-11 08:19:30 0.00B 设置停止容器时发送的系统调用信号
STOPSIGNAL SIGQUIT
# 2026-05-11 08:19:30 0.00B 声明容器运行时监听的端口
EXPOSE [8080/tcp]
# 2026-05-11 08:19:30 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/docker-entrypoint.sh"]
# 2026-05-11 08:19:30 4.62KB 复制新文件或目录到容器中
COPY 30-tune-worker-processes.sh /docker-entrypoint.d # buildkit
# 2026-05-11 08:19:30 3.01KB 复制新文件或目录到容器中
COPY 20-envsubst-on-templates.sh /docker-entrypoint.d # buildkit
# 2026-05-11 08:19:30 389.00B 复制新文件或目录到容器中
COPY 15-local-resolvers.envsh /docker-entrypoint.d # buildkit
# 2026-05-11 08:19:30 2.13KB 复制新文件或目录到容器中
COPY 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d # buildkit
# 2026-05-11 08:19:30 1.62KB 复制新文件或目录到容器中
COPY docker-entrypoint.sh / # buildkit
# 2026-05-11 08:19:30 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
# 2026-05-11 08:19:30 73.58MB 执行命令并创建新的镜像层
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/debian/ trixie 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="a090f4aecd628ab4b4124376efa55f617a272f9bae4e306df9b659b1b850133b0806cac31fb2a72faf1cc36bde8f5a19f4f5da5fd73502d3bbe374697920344e *${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
# 2026-05-11 08:19:30 0.00B 定义构建参数
ARG GID=101
# 2026-05-11 08:19:30 0.00B 定义构建参数
ARG UID=101
# 2026-05-11 08:19:30 0.00B 设置环境变量 DYNPKG_RELEASE
ENV DYNPKG_RELEASE=1~trixie
# 2026-05-11 08:19:30 0.00B 设置环境变量 PKG_RELEASE
ENV PKG_RELEASE=1~trixie
# 2026-05-11 08:19:30 0.00B 设置环境变量 NJS_RELEASE
ENV NJS_RELEASE=1~trixie
# 2026-05-11 08:19:30 0.00B 设置环境变量 NJS_VERSION
ENV NJS_VERSION=0.9.6
# 2026-05-11 08:19:30 0.00B 设置环境变量 NGINX_VERSION
ENV NGINX_VERSION=1.30.0
# 2026-05-11 08:19:30 0.00B 添加元数据标签
LABEL maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>
# 2026-05-05 08:00:00 78.62MB
# debian.sh --arch 'amd64' out/ 'trixie' '@1777939200'
镜像信息
{
"Id": "sha256:8e24ba305bf7fe87edc029f0d8d24d11535a0e569adfc564283afea1577cbacc",
"RepoTags": [
"penpotapp/frontend:2.16",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/penpotapp/frontend:2.16"
],
"RepoDigests": [
"penpotapp/frontend@sha256:78438805e377d8479fe75a3ddd62a0ce767e86b4355d0e2ce7d04a3e0cd5d3cb",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/penpotapp/frontend@sha256:0f5bd00dc7cd6102cbe74939f903540e113058b874989250a611a00cabe522b2"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-06-11T12:58:58.46845324Z",
"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.30.0",
"NJS_VERSION=0.9.6",
"NJS_RELEASE=1~trixie",
"PKG_RELEASE=1~trixie",
"DYNPKG_RELEASE=1~trixie"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/bin/bash",
"/entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"bundle_version": "2.16.0",
"maintainer": "Penpot \u003cdocker@penpot.app\u003e",
"org.opencontainers.image.created": "2026-06-11T12:58:17.189Z",
"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": "715bd1c09e8a8cf3f9911cb94b24c5803c5b7e2f",
"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.16.0"
},
"StopSignal": "SIGQUIT"
},
"Architecture": "amd64",
"Os": "linux",
"Size": 607044078,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/79f6f82a6f9d341d98a59cedf975284d453558cbf4c99de1d2e4777b193f852a/diff:/var/lib/docker/overlay2/0dea7ad89f9595681862ffa53247aefc6be5956a71190dc0b79c8a585f94b1c4/diff:/var/lib/docker/overlay2/e1fb4497121a7925287284bc397a8946e7f6079a2395ea7363d7b747dab2a8e5/diff:/var/lib/docker/overlay2/6bf08f2a4bf552c0ad1fb3b86fef05a509e5fbc3d8f6b948d531e9d5976346d0/diff:/var/lib/docker/overlay2/442f31f50d43e18f229f9c6528507f41ab6f0681ae7a81b1c66d1fe824d689a5/diff:/var/lib/docker/overlay2/837cf074d2b2d011a9b3d470158300439b117ccbf934cc4fa8d64872c7706384/diff:/var/lib/docker/overlay2/9b8b9cd6fdb18b26cf252ad17fc5a683385e9c103f384f5e6524e64ae999ff90/diff:/var/lib/docker/overlay2/515aa810380ac4261b1ada2956fb0b3675983069e16c41d3710c506090b73807/diff:/var/lib/docker/overlay2/e1b8493d477bfda4071ebdf79e8c0764bf5b48e1220780082478f5cb84827082/diff:/var/lib/docker/overlay2/eaceb82f291043eef39d41ce0316304c129e84fb90b090ea354b322a6a33aa8c/diff:/var/lib/docker/overlay2/fabe7ab64185becd2ddaa1993b31a6e93e138aa16fdc1a6ed0d4a51d9557f4c8/diff:/var/lib/docker/overlay2/1ffe455b580ed890b39c3353024f1a9efe8e49e5c88f4b89089dca17b88509f0/diff:/var/lib/docker/overlay2/adfa3cad64703d54331d118179aa4ce2ac27a0bebe3c3c15878eaaa05e90fd96/diff:/var/lib/docker/overlay2/d0e3d97a22e308690da55ff511309560b3716b2b7eaed0062c70441de5b93371/diff:/var/lib/docker/overlay2/d8bc540984cf2c9ce5ba7a5f7e705f440cc53b4ab873f66752542972e8ed97eb/diff:/var/lib/docker/overlay2/b6c6b6c060fd89bf5387f5870e8f1ec7305ed92df61bb238b6596f174375ae6e/diff:/var/lib/docker/overlay2/edb086d2136c724988371d816a548808dbb1672b11c0224797af494c30f376dc/diff:/var/lib/docker/overlay2/96c3e9be2b6285a6a87505454cb89dc711af91bdb672f5726ee377c2f19ea8d0/diff",
"MergedDir": "/var/lib/docker/overlay2/f9deae75b87a67fdb41481148ee041705790d476d88d372e3c1354dd63c1a5f7/merged",
"UpperDir": "/var/lib/docker/overlay2/f9deae75b87a67fdb41481148ee041705790d476d88d372e3c1354dd63c1a5f7/diff",
"WorkDir": "/var/lib/docker/overlay2/f9deae75b87a67fdb41481148ee041705790d476d88d372e3c1354dd63c1a5f7/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:79dd1f4c855cd061f687a994426634cf5f84c8ecdbc66c7a7d118e828dd93c99",
"sha256:ba59c1168b1e51b6e5aa9d91d5b07e2a16d617458d1232c68ef07b88cd612ede",
"sha256:22d566c7af91ab8398124fb2e427ab2f9f7c3bcb01268a87caba0f185057536a",
"sha256:d4538dfc6227bb24be228b6e4c7a49bf0fc103147b02a3e50762b2892711ac12",
"sha256:39438897fac93dd5ecdd0b9f55ef1854bda0ed5f436fb3ef0d580e789ebfa937",
"sha256:1c9a47c7be0834c84d8c43e7376863eb7a7b43882b674f7d7d9c1043656a3604",
"sha256:0e4f501527d577bad88c5b7b55321dbb00d98475243ffd58cbe53b95dced978b",
"sha256:f92fb25b61119b9a1c26fb5a5082715879b07d7c069e6ddf2ed2195fde359e85",
"sha256:5a9c8e490ee74bd0f12820e9c18b5c21d8ad19f67eb78ff9d5255911f5609e24",
"sha256:5c35d8559ac0bfd3d2065cf8057899da8fe95d64f01d3248393d3fb3ffff1852",
"sha256:e85237f3ddc47c33d6a6c55e4dadc1915cb56ef7cbc4ba2bc1ce5c0f788da3f5",
"sha256:7ed0d711551050f909003de71ade3243e0cae13b49778a1b7561f723fe241941",
"sha256:b81e390b083169c7feb0ce92f0c41988ad9238f73db22db2e5a73014b1180ab9",
"sha256:237631639839f520746c8e4d3295d42cdf3ee0beb1f221da0700d83855d21b8d",
"sha256:cd5ae0a4a8ad133eec2a7e73e621373a077de740d175997fae0d9f59a26e5e98",
"sha256:a91f7b6a826b6009fd34908f2e0c206538550be99e4113bd66d882d250c516de",
"sha256:1ec6531bd5c9bbedba0175056503d87320b649ce1ed11dbed9eb82c44456c57e",
"sha256:022184ded1acf1ab8c85a665dadfd438308f6df778b88ad15ec92b7521ccd0e6",
"sha256:5926d2252c6873696f67aeb28a1fce9dcb960398d2b6ec8bf07a5225ab1aeed0"
]
},
"Metadata": {
"LastTagTime": "2026-06-24T10:04:14.489019002+08:00"
}
}