iam*_*eli 15 docker kubernetes dockerhub
我在AWS上运行了一个现成的Kubernetes集群,随kube-up脚本一起安装.我想运行一些私有Docker Hub存储库中的容器.但我一直收到"未找到"的错误:
> kubectl get pod
NAME READY STATUS RESTARTS AGE
maestro-kubetest-d37hr 0/1 Error: image csats/maestro:latest not found 0 22m
Run Code Online (Sandbox Code Playgroud)
我创建了一个包含.dockercfg文件的秘密.我已通过运行此处发布的脚本确认它有效:
> kubectl get secrets docker-hub-csatsinternal -o yaml | grep dockercfg: | cut -f 2 -d : | base64 -D > ~/.dockercfg
> docker pull csats/maestro
latest: Pulling from csats/maestro
Run Code Online (Sandbox Code Playgroud)
我已经确认我没有使用.dockercfg脚本的新格式,我看起来像这样:
> cat ~/.dockercfg
{"https://index.docker.io/v1/":{"auth":"REDACTED BASE64 STRING HERE","email":"eng@csats.com"}}
Run Code Online (Sandbox Code Playgroud)
我试过在Debian而不是OS X上运行Base64编码,没有运气.(它产生的字符串与预期的相同.)
这是我的复制控制器的YAML:
---
kind: "ReplicationController"
apiVersion: "v1"
metadata:
name: "maestro-kubetest"
spec:
replicas: 1
selector:
app: "maestro"
ecosystem: "kubetest"
version: "1"
template:
metadata:
labels:
app: "maestro"
ecosystem: "kubetest"
version: "1"
spec:
imagePullSecrets:
- name: "docker-hub-csatsinternal"
containers:
- name: "maestro"
image: "csats/maestro"
imagePullPolicy: "Always"
restartPolicy: "Always"
dnsPolicy: "ClusterFirst"
Run Code Online (Sandbox Code Playgroud)
kubectl version:
Client Version: version.Info{Major:"1", Minor:"0", GitVersion:"v1.0.3", GitCommit:"61c6ac5f350253a4dc002aee97b7db7ff01ee4ca", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"0", GitVersion:"v1.0.3", GitCommit:"61c6ac5f350253a4dc002aee97b7db7ff01ee4ca", GitTreeState:"clean"}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
MrE*_*MrE 15
Docker config.json在~/.docker/
其中生成一个文件,如下所示:
{
"auths": {
"index.docker.io/v1/": {
"auth": "ZmFrZXBhc3N3b3JkMTIK",
"email": "email@company.com"
}
}
}
Run Code Online (Sandbox Code Playgroud)
你真正想要的是:
{"https://index.docker.io/v1/": {"auth": "XXXXXXXXXXXXXX", "email": "email@company.com"}}
Run Code Online (Sandbox Code Playgroud)
注意事项:
auths包装https://URL前面有然后你base64编码并用作.dockercfg名称的数据
apiVersion: v1
kind: Secret
metadata:
name: registry
data:
.dockercfg: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
type: kubernetes.io/dockercfg
Run Code Online (Sandbox Code Playgroud)
再次注意该.dockercfg行是一行(base64倾向于生成多行字符串)
ama*_*ion 13
您可能会看到"未找到图像"的另一个可能原因是您的密码的命名空间与容器的命名空间不匹配.
例如,如果您的部署yaml看起来像
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mydeployment
namespace: kube-system
Run Code Online (Sandbox Code Playgroud)
然后你必须确保Secret yaml使用匹配的命名空间:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
namespace: kube-system
data:
.dockerconfigjson: ****
type: kubernetes.io/dockerconfigjson
Run Code Online (Sandbox Code Playgroud)
如果没有为您的机密指定命名空间,它将最终在默认命名空间中,并且不会被使用.没有警告信息.我只是在这个问题上花了好几个小时,所以我想我会在这里分享它,希望我可以节省别人的时间.
小智 6
您可能会看到此错误的另一个原因是使用与集群版本不同的 kubectl 版本(例如,针对 1.8.x 集群使用 kubectl 1.9.x)。
kubectl create secret docker-registry命令生成的 secret 格式在不同版本之间发生了变化。
一个 1.8.x 集群需要一个格式如下的秘密:
{
"https://registry.gitlab.com":{
"username":"...",
"password":"...",
"email":"...",
"auth":"..."
}
}
Run Code Online (Sandbox Code Playgroud)
但是1.9.x kubectl生成的secret是这样的格式:
{
"auths":{
"https://registry.gitlab.com":{
"username":"...",
"password":"...",
"email":"...",
"auth":"..."
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,请仔细检查您的机密的 .dockercfg 数据的值,并验证它是否与您的 kubernetes 集群版本预期的格式相匹配。
| 归档时间: |
|
| 查看次数: |
14727 次 |
| 最近记录: |