注意: 这是 https://hub.docker.com/_/open-liberty 的 i386 架构构建的 "per-architecture" 仓库——有关更多信息,请参阅官方镜像文档中的 https://github.com/docker-library/official-images#architectures-other-than-amd64 和官方镜像常见问题中的 https://github.com/docker-library/faq#an-images-source-changed-in-git-now-what%E3%80%82
维护者:
https://github.com/OpenLiberty/ci.docker
获取帮助:
Open Liberty 社区
Dockerfile 链接警告: 此镜像在 i386 架构上不受支持
提交 issue 的位置:
https://github.com/OpenLiberty/ci.docker/issues?q=
支持的架构: (https://github.com/docker-library/official-images#architectures-other-than-amd64)
https://hub.docker.com/r/amd64/open-liberty/, https://hub.docker.com/r/arm64v8/open-liberty/, https://hub.docker.com/r/ppc64le/open-liberty/, https://hub.docker.com/r/s390x/open-liberty/
已发布镜像工件详情:
https://github.com/docker-library/repo-info/blob/master/repos/open-liberty (https://github.com/docker-library/repo-info/commits/master/repos/open-liberty)
(镜像元数据、传输大小等)
镜像更新:
https://github.com/docker-library/official-images/issues?q=label%3Alibrary%2Fopen-liberty
https://github.com/docker-library/official-images/blob/master/library/open-liberty (https://github.com/docker-library/official-images/commits/master/library/open-liberty)
此描述的来源:
https://github.com/docker-library/docs/tree/master/open-liberty (https://github.com/docker-library/docs/commits/master/open-liberty)
此仓库中的所有镜像均使用 Ubuntu 作为操作系统。对于使用 Universal Base Image 的变体,请参阅 https://hub.docker.com/r/openliberty/open-liberty/%E3%80%82
有关这些镜像的更多信息,请参阅我们的 https://github.com/OpenLiberty/ci.docker#container-images%E3%80%82
此镜像默认以 USER 1001(非 root)身份运行,属于组 0。请确保阅读以下内容以设置适当的文件夹和文件权限。
Open Liberty 访问的所有文件夹都已设置适当的权限,但如果您的扩展 Dockerfile 需要访问其他位置的权限,您可以临时切换到 root 并提供所需权限,例如:
dockerfileUSER root RUN mkdir -p /myFolder && chown -R 1001:0 /myFolder USER 1001
您必须确保通过 COPY 或 ADD 复制到镜像中的所有工件具有正确的权限,以便用户 1001 或组 0 可以 读取 和 执行,因为文件传输到 Docker 镜像时所有权会更改为 root:0。
您有几种方法可以实现:复制文件前、复制过程中或复制后。
由于文件所有权将更改为 root:0,您只需设置所有者组的权限以能够读取/执行工件(即 chmod 命令的中间数字)。例如,您可以执行 chmod g+rx server.xml 以确保 server.xml 以及应用程序的 EAR 或 WAR 文件、JDBC 驱动程序或其他通过 COPY 或 ADD 放置在镜像上的文件可以被组 0 读取和执行。
如果您使用 Docker v17.09.0-ce 及更高版本,可以在 ADD 或 COPY 期间利用 --chown=<user>:<group> 标志。例如:COPY --chown=1001:0 jvm.options /config/jvm.options。这是首选方法,因为您无需在调用 docker build 前更改权限,也不会在生成的镜像中复制层。
如果您的 Dockerfile 需要与旧版本的 Docker CE 兼容,并且不想预处理文件权限,您可以临时切换到 root 以更改所需文件的权限。例如:
dockerfileUSER root RUN chown 1001:0 /config/jvm.options RUN chown 1001:0 /output/resources/security/ltpa.keys USER 1001
请注意,此模式将复制这些工件的 Docker 层,这可能会严重增加生成的 Docker 镜像大小(取决于工件大小)。因此,建议在复制前或复制过程中设置权限。
此仓库提供多个标签。
kernel-slim 镜像仅包含 Liberty 内核,无额外运行时特性。此镜像是自定义构建镜像的推荐基础,以便它们仅包含特定应用所需的特性。例如,以下 Dockerfile 以此镜像为基础,复制列出应用所需特性的 server.xml,然后使用 features.sh 脚本从在线仓库下载这些特性。
dockerfileFROM i386/open-liberty:kernel-slim # 添加服务器配置 COPY --chown=1001:0 server.xml /config/ # 此脚本将添加请求的 XML 片段以启用 Liberty 特性,并使用 featureUtility 使镜像适合特定用途。仅在 'kernel-slim' 中可用。'full' 标签已包含所有特性以方便使用。 RUN features.sh # 添加应用程序 COPY --chown=1001:0 Sample1.war /config/dropins/ # 此脚本将添加请求的服务器配置,应用任何临时修复并填充缓存以优化运行时。 RUN configure.sh
完整的镜像列表见上文 "支持的标签及相应的 Dockerfile 链接" 部分。
这些镜像旨在支持多种使用模式。以下示例基于 Java EE8 Liberty 应用部署示例,并假设 https://github.com/WASdev/sample.servlet/releases/download/V1/DefaultServletEngine.zip 已提取到 /tmp,且 server.xml 已更新以通过在 server 节中添加以下元素来接受来自容器外部的 HTTP 连接(如果不使用我们标签中的预打包 server.xml 文件):
xml<httpEndpoint host="*" httpPort="9080" httpsPort="-1"/>
创建扩展 Docker 镜像(我们称之为 应用镜像)以封装应用程序及其配置是非常好的最佳实践。这将创建一个健壮、自包含且可预测的 Docker 镜像,可以根据请求生成新容器,而不依赖于可能随时间变化的卷或其他外部运行时工件。
如果您想构建最小的 Open Liberty 应用镜像,可以从我们的 kernel 标签开始,添加您的工件,并运行 configure.sh 以扩展特性集使其适合特定用途。有关更多详细信息,请参阅我们的 https://github.com/OpenLiberty/ci.docker#building-an-application-image%E3%80%82
Open Liberty 镜像具有一组内置的 XML 片段,用于启用和配置企业功能,如会话缓存和监控。这些通过应用镜像 Dockerfile 中的特定 ARG 切换,并通过 configure.sh 脚本配置。有关更多信息,请参阅我们 GitHub 页面上的 https://github.com/openliberty/ci.docker#enterprise-functionality%E3%80%82
此模式对于快速实验/早期开发非常有用(即 "我只想在迭代应用程序时运行它"),但不应用于涉及不同团队和环境的开发场景——对于这些情况,上述 "应用镜像" 模式是正确的选择。
使用 卷 时,可以将应用程序文件挂载到此服务器的 dropins 目录中并运行。以下示例在后台启动一个容器,运行主机文件系统中的 .WAR 文件,并将 HTTP 和 HTTPS 端口分别映射到 80 和 $443。
console$ docker run -d -p 80:9080 -p 443:9443 \ -v /tmp/DefaultServletEngine/dropins/Sample1.war:/config/dropins/Sample1.war \ i386/open-liberty:full
服务器启动后,您可以在 Docker 主机上浏览 http://localhost/Sample1/SimpleServlet。
注意:如果您在 OS X 或 Windows 上使用 boot2docker 虚拟机,需要使用 boot2docker ip 命令获取虚拟主机的 IP,而不是使用 localhost。
为了获得更大的配置灵活性,可以从主机挂载整个服务器配置目录,然后将服务器名称指定为运行命令的参数。注意:此特定示例服务器配置仅提供 HTTP 访问。
console$ docker run -d -p 80:9080 \ -v /tmp/DefaultServletEngine:/config \ i386/open-liberty:full
full 镜像引入了特定于所有 Liberty 特性支持的功能,包括 Spring Boot 应用程序。因此,此镜像包含用于将 Spring Boot 应用程序分离为瘦应用程序和依赖库缓存的 springBootUtility。要在不包含未使用特性的情况下获得这些功能,请改为基于 kernel 镜像构建,并为您的 server.xml 运行 configure.sh,确保它启用 springBoot-1.5 或 springBoot-2.0 特性。
为详细说明这些功能,本节假设独立的 Spring Boot 2.0.x 应用程序 hellospringboot.jar 存在于 /tmp 目录中。
Spring Boot 应用程序 JAR 部署到默认服务器配置中的 dropins/spring 目录,而不是 dropins 目录。Liberty 允许每个服务器配置一个 Spring Boot 应用程序。您可以通过将应用程序 JAR 添加到 dropins/spring 目录在此镜像上创建 Spring Boot 应用程序层。在此示例中,我们将 hellospringboot.jar 从 /tmp 复制到包含以下 Dockerfile 的同一目录。
dockerfileFROM i386/open-liberty:kernel COPY --chown=1001:0 hellospringboot.jar /config/dropins/spring/ COPY --chown=1001:0 server.xml /config/ RUN configure.sh
自定义镜像可以按如下方式构建和运行。
console$ docker build -t app . $ docker run -d -p 8080:9080 app
full 镜像提供库缓存目录 lib.index.cache,其中包含由 springBootUtility 命令创建的索引库缓存。使用 lib.index.cache 为瘦应用程序提供库缓存。
您可以使用 springBootUtility 命令在 full 镜像上创建瘦应用程序和库缓存层。以下示例使用 Docker 暂存来高效构建镜像,将胖 Spring Boot 应用程序部署为包含瘦应用程序和库缓存的两层。
dockerfileFROM i386/open-liberty:kernel as staging COPY --chown=1001:0 hellospringboot.jar /staging/myFatApp.jar COPY --chown=1001:0 server.xml /config/ RUN springBootUtility thin \ --sourceAppPath=/staging/myFatApp.jar \ --targetThinAppPath=/staging/myThinApp.jar \ --targetLibCachePath=/staging/lib.index.cache FROM i386/open-liberty:kernel COPY --chown=1001:0 server.xml /config COPY --from=staging /staging/lib.index.cache /lib.index.cache COPY --from=staging /staging/myThinApp.jar /config/dropins/spring/myThinApp.jar RUN configure.sh
对于打包了在持续应用程序更新中很少更改的库依赖项的 Spring Boot 应用程序,您可以使用上述功能在容器之间共享库缓存,并创建更高效的 Docker 层以利用 Docker 构建缓存。
当 open-liberty 镜像启动时,它可以在 /config/configDropins/defaults/keystore.xml 中生成一个 Liberty 服务器 XML 片段,其中指定带有生成密码的 keyStore 节。这会导致 Open Liberty 在启动时生成带有自签名证书的默认 keystore 和 truststore。镜像可以通过设置以下内容来请求此功能:
consoleENV KEYSTORE_REQUIRED "true"
提供自己的 keystore/truststore 时,可以通过添加以下内容禁用此默认行为:
consoleENV KEYSTORE_REQUIRED "false"
即使不生成,也建议将 keystore 自定义放置在 /config/configDropins/defaults/keystore.xml 中,因为这使其更易于查找,并使迁移到 websphere-liberty Docker 镜像更简单。
IBM JRE 提供 类数据共享 功能,通过使用文件支持的共享内存,在同一主机上运行的多个 Java 虚拟机之间提供透明和动态的数据共享。运行 Liberty Docker 镜像时,它会在 /opt/ol/wlp//output/.classCache 查找文件。要受益于类数据共享,此位置需要通过主机或数据卷容器在容器之间共享。
以上述示例 3 中的应用镜像为例,可以按如下方式共享包含共享缓存的主机文件位置 /tmp/open-liberty/classCache:
consoledocker run -d -p 80:9080 -p 443:9443 \ -v /tmp/open-liberty/classCache:/opt/ol/wlp/output/.classCache app
或者,创建一个命名数据卷容器,在共享文件位置公开卷:
consoledocker run -v /opt/ol/wlp//output/.classCache \ --name classcache i386/open-liberty true
然后,使用从数据卷容器 classcache 挂载的卷运行 Open Liberty 镜像,如下所示:
consoledocker run -d -p 80:9080 -p 443:9443 --volumes-from classcache app
Liberty 运行时会写入两个不同的目录:/opt/ol/wlp//output 和 /logs。要以只读模式运行 Liberty 镜像,这些目录可以挂载为临时文件系统。如果使用提供的镜像,keystore 将在初始启动时在服务器配置中生成。这意味着服务器配置目录要么需要是可读写的,要么 keystore 需要内置到镜像中。在示例命令中,/config 挂载为可读写卷。
consoledocker run -d -p 80:9080 -p 443:9443 \ --tmpfs /opt/ol/wlp//output --tmpfs /logs -v /config --read-only \ i386/open-liberty:webProfile8
WebSphere Liberty 是 Open Liberty 的商业发行版。有一个官方的 websphere-liberty Docker 镜像。websphere-liberty Docker 镜像早于 open-liberty,因此为了简化从 open-liberty 迁移到 websphere-liberty(或反之亦然),这些镜像大体上兼容。应该可以通过简单更改 FROM 子句在两者之间切换。在两者之间迁移的一些注意事项:
/opt/ol 而不是 /opt/ibm。/config 文件夹访问服务器配置。/output 文件夹访问服务器输出。/config/configDropins/defaults/keystore.xml。查看此镜像中包含的软件的 https://github.com/OpenLiberty/open-liberty/blob/master/LICENSE%E3%80%82
与所有 Docker 镜像一样,这些镜像可能还包含其他软件,这些软件可能受其他许可证(如基础发行版中的 Bash 等,以及包含的主要软件的任何直接或间接依赖项)约束。
一些能够自动检测到的其他许可证信息可能位于 https://github.com/docker-library/repo-info/tree/master/repos/open-liberty 中。
至于任何预构建镜像的使用,镜像用户有责任确保对此镜像的任何使用符合其中包含的所有软件的相关许可证。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务