docker - 来自服务器的错误(BadRequest):pod“espace-client-client”中的容器“espace-client-client”正在等待启动:尝试提取图像但失败
问题描述
一个月前,我在 Kubernetes prod 集群上部署了我的第一个应用程序。
我可以从 gitlab 注册表部署我的 2 个服务(前/后)。
现在,我将一个新的 docker 镜像推送到 gitlab 注册表,并希望在 prod 中重新部署它:
这是我的部署文件:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
reloader.stakater.com/auto: "true"
labels:
app: espace-client-client
name: espace-client-client
namespace: espace-client
spec:
replicas: 1
strategy: {}
template:
metadata:
labels:
app: espace-client-client
spec:
containers:
- envFrom:
- secretRef:
name: espace-client-client-env
image: registry.gitlab.com/xxx/espace_client/client:latest
name: espace-client-client
ports:
- containerPort: 3000
resources: {}
restartPolicy: Always
imagePullSecrets:
- name: gitlab-registry
我不知道里面是什么gitlab-registry
。我自己没有做,做的人离开了工作人员:(不过,我拥有所有的权限,所以,我只需要知道要放入什么秘密,也许可以删除它并重新创建它。
似乎秘密是基于我的 .docker/config.json
➜ espace-client git:(k8s) ✗ kubectl describe secrets gitlab-registry
Name: gitlab-registry
Namespace: default
Labels: <none>
Annotations: <none>
Type: kubernetes.io/dockerconfigjson
Data
====
.dockerconfigjson: 174 bytes
我试图删除现有的秘密,注销
docker logout registry.gitlab.com
kubectl delete secret gitlab-registry
然后再次登录:
docker login registry.gitlab.com -u myGitlabUser
Password:
Login Succeeded
并使用以下方法提取图像:
docker pull registry.gitlab.com/xxx/espace_client/client:latest
这有效。
文件:~/.docker/config.json
看起来很奇怪:
{
"auths": {
"registry.gitlab.com": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.6 (linux)"
},
"credsStore": "secretservice"
}
它似乎没有包含任何凭据...
然后我重新创建我的秘密
kubectl create secret generic gitlab-registry \
--from-file=.dockerconfigjson=/home/julien/.docker/config.json \
--type=kubernetes.io/dockerconfigjson
我也尝试过:
kubectl create secret docker-registry gitlab-registry --docker-server=registry.gitlab.com --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
并再次部署:
kubectl rollout restart deployment/espace-client-client -n espace-client
但我仍然有同样的错误:
Error from server (BadRequest): container "espace-client-client" in pod "espace-client-client-6c8b88f795-wcrlh" is waiting to start: trying and failing to pull image
解决方案
您必须更新gitlab-registry
密钥,因为此项用于让 Kubelet 使用凭证拉取受保护的映像。
请删除旧密码kubectl -n yournamespace delete secret gitlab-registry
并重新创建输入凭据:
kubectl -n yournamespace create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD[ --docker-email=DOCKER_EMAIL]
其中: -DOCKER_REGISTRY_SERVER
是 GitLab Docker 注册表实例 -DOCKER_USER
是用于拉取图像的机器人帐户的用户名 -DOCKER_PASSWORD
是附加到机器人帐户的密码
您可以忽略docker-email
,因为它不是强制性的(注意方括号)。
推荐阅读
- c# - 详细视图asp.net mvc5中的外部值为空
- excel - 当我在不同位置打开 excel 文件时出现运行时错误“91” - VBA
- python - 在 Python 中过滤数据框以获取指定列中的 TRUE/FALSE 值
- python - 雅虎财经 API 是否开放?
- javascript - 如何排除 karma 中选定组件的 customHeaders?
- sql - 在 Teradata 中将字符串转换为日期的问题
- node.js - socket-io 出现“错误的握手方法”错误
- reactjs - React js在日期选择器中设置数据数组
- flutter - 如何正确加载页面以使其每次都能正常工作
- python - numpy 结果不应该依赖于顺序