Openshift中是否存在Liberty Docker映像部署问题

Openshift中是否存在Liberty Docker映像部署问题,docker,openshift,websphere-liberty,Docker,Openshift,Websphere Liberty,我能够在本地docker容器中部署Liberty docker映像,并可以访问Liberty server 我将liberty映像推送到系统中安装的Minishift,但在创建docker容器时,遇到如下错误: 如果以前有人尝试过,请分享您的观点: 日志跟踪: unable to write 'random state' mkdir: cannot create directory '/config/configDropins': Permission denied /opt/ibm/docke

我能够在本地docker容器中部署Liberty docker映像,并可以访问Liberty server

我将liberty映像推送到系统中安装的Minishift,但在创建docker容器时,遇到如下错误:

如果以前有人尝试过,请分享您的观点:

日志跟踪:

unable to write 'random state'
mkdir: cannot create directory '/config/configDropins': Permission denied
/opt/ibm/docker/docker-server: line 32: 
/config/configDropins/defaults/keystore.xml: No such file or directory
JVMSHRC155E Error copying username into cache name
JVMSHRC686I Failed to startup shared class cache. Continue without 
using it as -Xshareclasses:nonfatal is specified
CWWKE0005E: The runtime environment could not be launched.
CWWKE0044E: There is no write permission for server directory 
/opt/ibm/wlp/output/defaultServer

默认情况下,OpenShift将以项目唯一的指定用户ID运行图像。许多可用的映像都已写入,因此它们只能作为
根运行
,即使它们不需要作为
根运行

如果您尝试运行这样的映像,因为目录/文件已设置为只能由
root
用户写入,因此将映像作为非
root
用户ID运行将导致其失败

最佳做法是编写映像,以便可以作为任意用户ID运行。不幸的是,很少有人这样做,其结果是,他们的映像无法在更安全的多租户环境中用于在容器中部署应用程序

OpenShift文档提供了有关如何实现映像的指南,以便能够在更安全的环境中运行。请参阅中的“支持任意用户ID”一节:

如果映像是由第三方构建的,并且他们对更改映像不感兴趣,因此可以在安全的多租户环境中工作,那么您有几个选择

第一种方法是创建一个派生映像,在构建它的步骤中,它会返回并修复目录和文件的权限,以便可以使用。请注意,在执行此操作时,您必须小心更改权限,因为更改派生映像中文件的权限会导致生成文件的完整副本。如果文件很大,这将开始扩大您的图像大小

第二种方法是,如果您是OpenShift集群的管理员,您可以放松集群上运行映像的服务帐户的安全性,以便允许它以
root
身份运行容器。如果可能的话,您应该避免这样做,尤其是对于您不信任的第三方映像。有关如何执行此操作的详细信息,请参阅:


如果需要固定权限的内容的总大小很小,那么最后一种可能用于某些映像的方法是使用init容器复制需要对
emptyDir
卷进行写访问的目录。然后在主容器中装入复制目录顶部的
emptyDir
卷。这样可以避免修改图像或启用
anyuid
。如果还必须复制应用程序二进制文件,则
emptyDir
卷中的可用空间量可能不够。这可能只适用于应用程序希望更新配置文件或创建锁文件的情况。如果同一目录用于大量临时文件系统数据(如缓存数据库或日志),则无法使用该目录。

默认情况下,OpenShift将以项目特有的指定用户ID运行图像。许多可用的映像都已写入,因此它们只能作为
根运行
,即使它们不需要作为
根运行

如果您尝试运行这样的映像,因为目录/文件已设置为只能由
root
用户写入,因此将映像作为非
root
用户ID运行将导致其失败

最佳做法是编写映像,以便可以作为任意用户ID运行。不幸的是,很少有人这样做,其结果是,他们的映像无法在更安全的多租户环境中用于在容器中部署应用程序

OpenShift文档提供了有关如何实现映像的指南,以便能够在更安全的环境中运行。请参阅中的“支持任意用户ID”一节:

如果映像是由第三方构建的,并且他们对更改映像不感兴趣,因此可以在安全的多租户环境中工作,那么您有几个选择

第一种方法是创建一个派生映像,在构建它的步骤中,它会返回并修复目录和文件的权限,以便可以使用。请注意,在执行此操作时,您必须小心更改权限,因为更改派生映像中文件的权限会导致生成文件的完整副本。如果文件很大,这将开始扩大您的图像大小

第二种方法是,如果您是OpenShift集群的管理员,您可以放松集群上运行映像的服务帐户的安全性,以便允许它以
root
身份运行容器。如果可能的话,您应该避免这样做,尤其是对于您不信任的第三方映像。有关如何执行此操作的详细信息,请参阅:


如果需要固定权限的内容的总大小很小,那么最后一种可能用于某些映像的方法是使用init容器复制需要对
emptyDir
卷进行写访问的目录。然后在主容器中装入复制目录顶部的
emptyDir
卷。这样可以避免修改图像或启用
anyuid
。如果还必须复制应用程序二进制文件,则
emptyDir
卷中的可用空间量可能不够。这可能只适用于应用程序希望更新配置文件或创建锁文件的情况。如果同一目录用于大量临时文件系统数据(如缓存数据库或日志),则无法使用此目录。

docker文件的外观如何?错误消息表明启动服务器的用户id没有足够的权限写入服务器输出目录。我只在编写为以非root用户身份运行的Docker文件中看到过这一点。默认的liberty映像以root运行。默认情况下,OpenShift不会运行