Docker for Mac - Kubernetes - 参考本地镜像
Docker for Mac - Kubernetes - reference local image
我在 Kubernetes 支持下使用 Docker for Mac,我正在努力创建引用本地构建映像的 Kubernetes 部署。
docker images
的输出:
REPOSITORY TAG IMAGE
test latest 2c3bdb36a5ed
我的 deployment.yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloworld-deployment
spec:
selector:
matchLabels:
app: helloworld
replicas: 1
template:
metadata:
labels:
app: helloworld
spec:
containers:
- name: aaa
image: test:latest
ports:
- containerPort: 8080
当我 运行 kubectl apply -f deplyment.yaml
pods 被创建但是:
helloworld-deployment-764b8b85d8-2c4kl 0/1 ImagePullBackOff 0
helloworld-deployment-764b8b85d8-rzq7l 0/1 ImagePullBackOff 0
kubectl describe
其中之一 pods 给出:
Normal Scheduled 20s default-scheduler Successfully assigned helloworld-deployment-79f66d97c6-7tj2x to docker-for-desktop
Normal SuccessfulMountVolume 19s kubelet, docker-for-desktop MountVolume.SetUp succeeded for volume "default-token-72f44"
Normal BackOff 16s kubelet, docker-for-desktop Back-off pulling image "test:latest"
Warning Failed 16s kubelet, docker-for-desktop Error: ImagePullBackOff
Normal Pulling 4s (x2 over 19s) kubelet, docker-for-desktop pulling image "test:latest"
Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Failed to pull image "test:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for test, repository does not exist or may require 'docker login'
Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Error: ErrImagePull
有趣的是,如果我尝试 运行 在 dockerhub 上托管一些图像,那么一切都很好,
我也尝试使用 skaffold,它也很有魅力...
我看到一些关于 minikube 的类似问题,解决方案是使用 minikube docker 守护进程构建镜像,以便它们可以从 Kubernetes 集群中引用。
我想避免设置本地存储库,那么如何让它与 Docker 的 Kubernetes 一起工作?
使用图像的标记版本而不是最新版本,因为如果您将 Docker 图像发送到生产环境,您应该忽略最新标记。不要使用它。不要被它诱惑。很容易看到它并认为您的部署脚本应该只是拉“最新”并且您的构建过程将确保它是有效的。
除了techtrainer评论和回答,
我想提供一些如何做的例子。
一般规则。您必须使用图像的标签版本而不是 latest
。
使用 Docker 标签,您可以获得的越具体越好。具体一点以避免使用错误的图像。
如果您不希望您的同事或其他 Docker 用户下载图像并且不知道它们有多新,请考虑这一点。
明确避免此类问题。
docker tag IMAGE ID image/TAG:version.d.m.y
为了更好地管理您的图像,您应该有一些巧妙的命名约定。
我更喜欢使用图像的阶段、版本和创建日期。例如:
docker tag 113a43faa138 ubuntu/prod:v1.8.6.2018
表示生产阶段,版本1,创建于2018年6月8日。
仅此而已。您的版本可用,并且命名对您和
此图片的更多用户。
通过将 imagePullPolicy
设置为 Never
,我能够 运行 本地图像。
例如:
apiVersion: v1
kind: Pod
metadata:
name: local-image-test
spec:
containers:
- name: local-image-container
image: local-image:latest
imagePullPolicy: Never
(此解决方案归功于 https://github.com/kubernetes/kubernetes/issues/1293#issuecomment-357326426)
我在 Kubernetes 支持下使用 Docker for Mac,我正在努力创建引用本地构建映像的 Kubernetes 部署。
docker images
的输出:
REPOSITORY TAG IMAGE
test latest 2c3bdb36a5ed
我的 deployment.yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloworld-deployment
spec:
selector:
matchLabels:
app: helloworld
replicas: 1
template:
metadata:
labels:
app: helloworld
spec:
containers:
- name: aaa
image: test:latest
ports:
- containerPort: 8080
当我 运行 kubectl apply -f deplyment.yaml
pods 被创建但是:
helloworld-deployment-764b8b85d8-2c4kl 0/1 ImagePullBackOff 0
helloworld-deployment-764b8b85d8-rzq7l 0/1 ImagePullBackOff 0
kubectl describe
其中之一 pods 给出:
Normal Scheduled 20s default-scheduler Successfully assigned helloworld-deployment-79f66d97c6-7tj2x to docker-for-desktop
Normal SuccessfulMountVolume 19s kubelet, docker-for-desktop MountVolume.SetUp succeeded for volume "default-token-72f44"
Normal BackOff 16s kubelet, docker-for-desktop Back-off pulling image "test:latest"
Warning Failed 16s kubelet, docker-for-desktop Error: ImagePullBackOff
Normal Pulling 4s (x2 over 19s) kubelet, docker-for-desktop pulling image "test:latest"
Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Failed to pull image "test:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for test, repository does not exist or may require 'docker login'
Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Error: ErrImagePull
有趣的是,如果我尝试 运行 在 dockerhub 上托管一些图像,那么一切都很好, 我也尝试使用 skaffold,它也很有魅力...
我看到一些关于 minikube 的类似问题,解决方案是使用 minikube docker 守护进程构建镜像,以便它们可以从 Kubernetes 集群中引用。
我想避免设置本地存储库,那么如何让它与 Docker 的 Kubernetes 一起工作?
使用图像的标记版本而不是最新版本,因为如果您将 Docker 图像发送到生产环境,您应该忽略最新标记。不要使用它。不要被它诱惑。很容易看到它并认为您的部署脚本应该只是拉“最新”并且您的构建过程将确保它是有效的。
除了techtrainer评论和回答, 我想提供一些如何做的例子。
一般规则。您必须使用图像的标签版本而不是 latest
。
使用 Docker 标签,您可以获得的越具体越好。具体一点以避免使用错误的图像。
如果您不希望您的同事或其他 Docker 用户下载图像并且不知道它们有多新,请考虑这一点。
明确避免此类问题。
docker tag IMAGE ID image/TAG:version.d.m.y
为了更好地管理您的图像,您应该有一些巧妙的命名约定。 我更喜欢使用图像的阶段、版本和创建日期。例如:
docker tag 113a43faa138 ubuntu/prod:v1.8.6.2018
表示生产阶段,版本1,创建于2018年6月8日。
仅此而已。您的版本可用,并且命名对您和 此图片的更多用户。
通过将 imagePullPolicy
设置为 Never
,我能够 运行 本地图像。
例如:
apiVersion: v1
kind: Pod
metadata:
name: local-image-test
spec:
containers:
- name: local-image-container
image: local-image:latest
imagePullPolicy: Never
(此解决方案归功于 https://github.com/kubernetes/kubernetes/issues/1293#issuecomment-357326426)