Docker Openshift Origin针对不安全的注册表运行应用程序会产生带“的卡住pod”;拉取图像时出错";
我在Docker容器中使用Openshift Origin,并使用以下方法从Docker注册表(同一RHEL主机VM上的容器)中提取图像: 这一命令在当时似乎运作良好。但是,pod仍为“集装箱创建”,kubectl的结果描述了pod:Docker Openshift Origin针对不安全的注册表运行应用程序会产生带“的卡住pod”;拉取图像时出错";,docker,rhel,openshift-origin,Docker,Rhel,Openshift Origin,我在Docker容器中使用Openshift Origin,并使用以下方法从Docker注册表(同一RHEL主机VM上的容器)中提取图像: 这一命令在当时似乎运作良好。但是,pod仍为“集装箱创建”,kubectl的结果描述了pod: OPENSHIFT_DEPLOYMENT_NAME: jenkins-1 OPENSHIFT_DEPLOYMENT_NAMESPACE: default Conditions: Type Status Ready
OPENSHIFT_DEPLOYMENT_NAME: jenkins-1
OPENSHIFT_DEPLOYMENT_NAMESPACE: default
Conditions:
Type Status
Ready False
Volumes:
deployer-token-3bls9:
Type: Secret (a volume populated by a Secret)
SecretName: deployer-token-3bls9
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
2h 4m 33 {kubelet mtl-vm375} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "Error while pulling image: Get https://index.docker.io/v1/repositories/openshift/origin-pod/images: dial tcp 10.230.22.20:443: connection refused"
2h 6s 652 {kubelet mtl-vm375} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"openshift/origin-pod:v1.1.5\""
有一个错误显示它正在尝试使用https,我猜(但不确定)就是这个错误,因为我还没有用证书正确设置https:
根据Stackoverflow的其他建议,我已将以下环境变量添加到原始图像中:
KUBE\u ENABLE\u unsecure\u REGISTRY=true
EXTRA_DOCKER_OPTS=--不安全的注册表
我在以下方面也有类似的结果:
KUBE\u ENABLE\u unsecure\u REGISTRY=true\
EXTRA_DOCKER_OPTS=“--不安全注册表10.230.22.20”
版本信息:
[root@mtl-vm375 origin]# oc version
oc v1.1.5-52-gd58f979 kubernetes v1.2.0-36-g4a3f9c5
及
提前感谢,
John这是我使用另一个Docker注册表(甚至在集群之外)中的图像所执行的步骤 我的注册处:
https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000
$ oc secrets new-dockercfg mysecret --docker-server=https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000 --docker-username=testuser --docker-password=testpassword --docker-email=any@mail.com
我(在操作系统中)创建要推送到的项目
$ oc new-project test
我在项目中,我将创建一个秘密,以便我的openshift能够访问我的注册表:
https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000
$ oc secrets new-dockercfg mysecret --docker-server=https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000 --docker-username=testuser --docker-password=testpassword --docker-email=any@mail.com
将机密添加到服务帐户
$ oc secrets add serviceaccount/default secrets/mysecret --for=pull
$ oc secrets add serviceaccount/builder secrets/mysecret
导入图像流
$ oc import-image --insecure ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000/test/name-of-image:1 --confirm
现在您可以创建一个
oc new-app --insecure-registry <image-stream-name>:tag
oc新应用程序--不安全注册表:标记
更好的方法是将图像推送到OpenShift注册表。这样就不必创建秘密并执行oc导入
。
您可以公开一个注册表(安全注册表),这样您就可以从集群外部访问注册表以推送图像。这是我使用另一个Docker注册表(甚至在集群外部)的图像所执行的步骤 我的注册处:
https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000
$ oc secrets new-dockercfg mysecret --docker-server=https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000 --docker-username=testuser --docker-password=testpassword --docker-email=any@mail.com
我(在操作系统中)创建要推送到的项目
$ oc new-project test
我在项目中,我将创建一个秘密,以便我的openshift能够访问我的注册表:
https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000
$ oc secrets new-dockercfg mysecret --docker-server=https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000 --docker-username=testuser --docker-password=testpassword --docker-email=any@mail.com
将机密添加到服务帐户
$ oc secrets add serviceaccount/default secrets/mysecret --for=pull
$ oc secrets add serviceaccount/builder secrets/mysecret
导入图像流
$ oc import-image --insecure ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000/test/name-of-image:1 --confirm
现在您可以创建一个
oc new-app --insecure-registry <image-stream-name>:tag
oc新应用程序--不安全注册表:标记
更好的方法是将图像推送到OpenShift注册表。这样就不必创建秘密并执行oc导入
。
您可以公开注册表(安全注册表),这样您就可以从集群外部访问注册表以推送图像。如果您在通过重新发布(重新导入)更新导入:标记后仍在使用Openshift Builder,则
- 您的OpenShift构建似乎没有使用您通过oc导入图像发布的最新图像标记
- 打开“应用程序的生成器配置”
- 转到“映像配置”部分
- 并将“Build From”值从“Docker Image Repository”切换到“Image Stream Tag”
- 然后在那里选择名称空间、图像流和标记
- 将新值设置为“Docker Image Repository”没有帮助
- 将复选框设置为“始终拉动构建…”也没有帮助
如果在通过重新发布(重新导入)更新导入:标记后,您在Openshift Builder中遇到了麻烦
- 您的OpenShift构建似乎没有使用您通过oc导入图像发布的最新图像标记
- 打开“应用程序的生成器配置”
- 转到“映像配置”部分
- 并将“Build From”值从“Docker Image Repository”切换到“Image Stream Tag”
- 然后在那里选择名称空间、图像流和标记
- 将新值设置为“Docker Image Repository”没有帮助
- 将复选框设置为“始终拉动构建…”也没有帮助
您是否已尝试使用--loglevel=5执行此命令?+在注册表上执行docker登录后,您是否能够手动提取图像?+您的注册表是真正的docker注册表还是“openshift”注册表“最佳”方法是保护您的openshift注册表。标记jenkins图像并将其推送到OpenShift注册表(当您想从集群外部推送时,请公开注册表)。OpenShift能够在集群中的任何地方使用映像,即使使用命令
oc new app--loglevel=5--unsecure registry=true--docker image=mtl-vm375:5000/jenkins:1.0
也没有提供更多的日志:[root@mtl-vm375源代码]#oc从服务器记录jenkins-1-deploy错误:pod“jenkins-1-deploy”中的容器“deployment”正在等待开始:ContainerCreating
现在,我使用的是真正的docker注册表,而不是openshift注册表,可以手动将其从docker存储库中拉出,没有问题。我还没有尝试过另一种方法,将它推送到Openshift的注册表中。这是个好建议。我会尝试一下。将您的图像标记为服务ip:5000/项目/图像。您选择openshift作为项目,然后将创建整个集群都知道的图像流。当您想从外部推送到注册表时,您需要将其导出(docker regsitry.xxx:443/)。我试图用另一个注册表执行您想要的操作。我将把它作为一个答案发布。您也可以尝试使用--loglevel=5?+在注册表上执行docker登录后,您是否能够手动提取图像?+您的注册表是真正的docker注册表还是“openshift”注册表“最佳”方法是保护您的openshift注册表。标记jenkins图像并将其推送到OpenShift注册表(当您想从集群外部推送时,请公开注册表)。OpenShift能够在集群的任何地方使用图像,即使使用命令ocnew-