如何将私有组织镜像从 docker hub 部署到 kubernetes
How to deploy private organization image from docker hub to kubernetes
现状
我在 DigitalOcean 上创建了一个 Kubernetes 集群。我想部署一个 Docker 图像,该图像托管在一个私人空间中,该私人空间又属于 Docker Hub 中的一个组织。
- Docker 中心组织名称(样本):myorg
- Docker 集线器存储库名称(样本):myorg/mo-server
因此,为了推送新图像,我使用 docker push myorg/mo-server
(注意:上面的例子中图片名称中包含一个破折号(-
),我在真实姓名中也有)
问题
当我尝试使用 kubectl
将 docker 映像部署到 kubernetes 时,部署总是以 ErrImagePull
状态结束。错误信息:
ailed to pull image "index.docker.io/myorg/mo-server": rpc error: code = Unknown desc = Error response from daemon: pull access denied for myorg/mo-server, repository does not exist or may require 'docker login'
到目前为止我尝试了什么
因为它是一个私有存储库,所以我事先创建了一个秘密。为此,我使用自己的用户名和电子邮件。
set DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/
set DOCKER_USER=sarensw
set DOCKER_EMAIL=stephan@myorg.com
set DOCKER_PASSWORD=...
凭据与我使用 docker login
时的凭据相同。然后我使用以下方法创建一个秘密:
kubectl create secret docker-registry regcred
--docker-server=%DOCKER_REGISTRY_SERVER%
--docker-username=%DOCKER_USER%
--docker-password=%DOCKER_PASSWORD%
--docker-email=%DOCKER_EMAIL%
然后,我使用 kubectl create
创建一个新部署。
kubectl create -f ci\helper\kub-deploy-staging.yaml
kub-deploy-staging.yaml
看起来如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mo-server
spec:
replicas: 1
selector:
matchLabels:
app: mo-server
template:
metadata:
labels:
app: mo-server
spec:
containers:
- name: mo-server
image: index.docker.io/myorg/mo-server
imagePullPolicy: Always
command: [ "echo", "SUCCESS" ]
imagePullSecrets:
- name: regcred
如上所述,结果是ErrImagePull
。
我很确定 image: index.docker.io/myorg/mo-server
是罪魁祸首,因为它是我尝试与普通帐户一起使用的组织图像。而且所有访问私有镜像的教程都没有考虑组织。
那我做错了什么?
(许多相似的参考文献之一): https://gist.github.com/rkuzsma/b9a0e342c56479f5e58d654b1341f01e
我怀疑发生这种情况是因为您创建秘密的 docker 注册表变量,请尝试用 registry.hub.docker.com
替换 index.docker.io
因为这是官方的 docker 中心注册表 URL。如果您使用的是 Google 云,您也可以尝试 docker.io
据我所知,您正在尝试使用 "set" 命令设置变量,请立即尝试使用 "export",如您遵循的 gist 文件中所述
export DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/
export DOCKER_USER=Type your dockerhub username, same as when you `docker login`
export DOCKER_EMAIL=Type your dockerhub email, same as when you `docker login`
export DOCKER_PASSWORD=Type your dockerhub pw, same as when you `docker login`
kubectl create secret docker-registry myregistrykey \
--docker-server=$DOCKER_REGISTRY_SERVER \
--docker-username=$DOCKER_USER \
--docker-password=$DOCKER_PASSWORD \
--docker-email=$DOCKER_EMAIL
然后再试一次,请告诉我们结果。
现状
我在 DigitalOcean 上创建了一个 Kubernetes 集群。我想部署一个 Docker 图像,该图像托管在一个私人空间中,该私人空间又属于 Docker Hub 中的一个组织。
- Docker 中心组织名称(样本):myorg
- Docker 集线器存储库名称(样本):myorg/mo-server
因此,为了推送新图像,我使用 docker push myorg/mo-server
(注意:上面的例子中图片名称中包含一个破折号(-
),我在真实姓名中也有)
问题
当我尝试使用 kubectl
将 docker 映像部署到 kubernetes 时,部署总是以 ErrImagePull
状态结束。错误信息:
ailed to pull image "index.docker.io/myorg/mo-server": rpc error: code = Unknown desc = Error response from daemon: pull access denied for myorg/mo-server, repository does not exist or may require 'docker login'
到目前为止我尝试了什么
因为它是一个私有存储库,所以我事先创建了一个秘密。为此,我使用自己的用户名和电子邮件。
set DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/
set DOCKER_USER=sarensw
set DOCKER_EMAIL=stephan@myorg.com
set DOCKER_PASSWORD=...
凭据与我使用 docker login
时的凭据相同。然后我使用以下方法创建一个秘密:
kubectl create secret docker-registry regcred
--docker-server=%DOCKER_REGISTRY_SERVER%
--docker-username=%DOCKER_USER%
--docker-password=%DOCKER_PASSWORD%
--docker-email=%DOCKER_EMAIL%
然后,我使用 kubectl create
创建一个新部署。
kubectl create -f ci\helper\kub-deploy-staging.yaml
kub-deploy-staging.yaml
看起来如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mo-server
spec:
replicas: 1
selector:
matchLabels:
app: mo-server
template:
metadata:
labels:
app: mo-server
spec:
containers:
- name: mo-server
image: index.docker.io/myorg/mo-server
imagePullPolicy: Always
command: [ "echo", "SUCCESS" ]
imagePullSecrets:
- name: regcred
如上所述,结果是ErrImagePull
。
我很确定 image: index.docker.io/myorg/mo-server
是罪魁祸首,因为它是我尝试与普通帐户一起使用的组织图像。而且所有访问私有镜像的教程都没有考虑组织。
那我做错了什么?
(许多相似的参考文献之一): https://gist.github.com/rkuzsma/b9a0e342c56479f5e58d654b1341f01e
我怀疑发生这种情况是因为您创建秘密的 docker 注册表变量,请尝试用 registry.hub.docker.com
替换 index.docker.io
因为这是官方的 docker 中心注册表 URL。如果您使用的是 Google 云,您也可以尝试 docker.io
据我所知,您正在尝试使用 "set" 命令设置变量,请立即尝试使用 "export",如您遵循的 gist 文件中所述
export DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/
export DOCKER_USER=Type your dockerhub username, same as when you `docker login`
export DOCKER_EMAIL=Type your dockerhub email, same as when you `docker login`
export DOCKER_PASSWORD=Type your dockerhub pw, same as when you `docker login`
kubectl create secret docker-registry myregistrykey \
--docker-server=$DOCKER_REGISTRY_SERVER \
--docker-username=$DOCKER_USER \
--docker-password=$DOCKER_PASSWORD \
--docker-email=$DOCKER_EMAIL
然后再试一次,请告诉我们结果。