Kubernetes 无法从 Docker Hub 上的私有存储库中提取图像
Kubernetes cannot pull an image from private repository on Docker Hub
出于某种原因,Kubernetes 无法从我在 Docker Hub 上的私人帐户中提取图像。我尝试了所有可能的创建秘密的方法(来自 config.json,通过直接在命令行上提供凭据)但仍然没有成功。
我上次 docker login
并执行了以下命令来创建密钥:
kubectl create secret docker-registry dockerhub-credentials --from-file=.dockerconfigjson=/home/myuser/.docker/config.json
还尝试了以下命令(相同但我认为 kubectl
中可能存在无法正确识别参数的错误:
kubectl create secret generic dockerhub-credentials --from-file=.dockerconfigjson=/home/myuser/.docker/config.json --type=kubernetes.io/dockerconfigjson
部署后,我可以在 pod 的 YAML 文件中看到以下内容:
spec:
volumes:
...
containers:
- name: container-name
image: 'username/projects:web_api_123'
ports:
- containerPort: 80
protocol: TCP
...
imagePullPolicy: IfNotPresent
...
imagePullSecrets:
- name: dockerhub-credentials
图像名称正确(我已验证)并且具有 Docker 集线器凭据的秘密已正确分配给我的 POD。
我什至修补了默认服务帐户!但是还是不行。
好的,问题出在命名空间:我所有的部署、pods、服务等都在一个单独的命名空间中,但是创建秘密的命令在 'default' 命名空间中执行。
出于某种原因,我认为 'default' 命名空间中的这些秘密对于另一个命名空间是可见的,事实并非如此。所以,如果你想创建一个 docker 配置秘密,你必须使用 YAML 来完成:
kind: Secret
apiVersion: v1
metadata:
name: dockerhub-credentials
namespace: your-namespace
data:
.dockerconfigjson: base64-encoded-/.docker/config.json
type: kubernetes.io/dockerconfigjson
出于某种原因,Kubernetes 无法从我在 Docker Hub 上的私人帐户中提取图像。我尝试了所有可能的创建秘密的方法(来自 config.json,通过直接在命令行上提供凭据)但仍然没有成功。
我上次 docker login
并执行了以下命令来创建密钥:
kubectl create secret docker-registry dockerhub-credentials --from-file=.dockerconfigjson=/home/myuser/.docker/config.json
还尝试了以下命令(相同但我认为 kubectl
中可能存在无法正确识别参数的错误:
kubectl create secret generic dockerhub-credentials --from-file=.dockerconfigjson=/home/myuser/.docker/config.json --type=kubernetes.io/dockerconfigjson
部署后,我可以在 pod 的 YAML 文件中看到以下内容:
spec:
volumes:
...
containers:
- name: container-name
image: 'username/projects:web_api_123'
ports:
- containerPort: 80
protocol: TCP
...
imagePullPolicy: IfNotPresent
...
imagePullSecrets:
- name: dockerhub-credentials
图像名称正确(我已验证)并且具有 Docker 集线器凭据的秘密已正确分配给我的 POD。 我什至修补了默认服务帐户!但是还是不行。
好的,问题出在命名空间:我所有的部署、pods、服务等都在一个单独的命名空间中,但是创建秘密的命令在 'default' 命名空间中执行。
出于某种原因,我认为 'default' 命名空间中的这些秘密对于另一个命名空间是可见的,事实并非如此。所以,如果你想创建一个 docker 配置秘密,你必须使用 YAML 来完成:
kind: Secret
apiVersion: v1
metadata:
name: dockerhub-credentials
namespace: your-namespace
data:
.dockerconfigjson: base64-encoded-/.docker/config.json
type: kubernetes.io/dockerconfigjson