จะใช้ภาพ Docker ท้องถิ่นกับ Minikube ได้อย่างไร?


299

ฉันมีภาพนักเทียบท่าหลายภาพที่ฉันต้องการใช้ด้วย minikubeผมมีภาพนักเทียบท่าหลายอย่างที่ฉันต้องการที่จะใช้กับฉันไม่ต้องการอัปโหลดก่อนแล้วจึงดาวน์โหลดภาพเดียวกันแทนที่จะใช้ภาพในเครื่องโดยตรง ฉันจะทำสิ่งนี้ได้อย่างไร

สิ่งที่ฉันพยายาม:
1. ฉันลองใช้คำสั่งเหล่านี้ (แยกกัน, ลบอินสแตนซ์ของ minikube ทั้งสองครั้งและเริ่มใหม่)

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never

ผลผลิต:

NAME                    READY     STATUS              RESTARTS   AGE
hdfs-2425930030-q0sdl   0/1       ContainerCreating   0          10m

มันติดอยู่กับสถานะบางอย่าง แต่ไม่ถึงสถานะพร้อม


2. ฉันพยายามสร้างรีจิสตรีแล้วใส่รูปภาพเข้าไป แต่มันก็ไม่ได้ผลเหมือนกัน ฉันอาจทำอย่างไม่ถูกต้อง แต่ฉันไม่สามารถหาคำแนะนำที่เหมาะสมในการทำงานนี้

โปรดให้คำแนะนำในการใช้อิมเมจ docker แบบโลคัลในอินสแตนซ์ kubernetes ท้องถิ่น
ระบบปฏิบัติการ: ubuntu 16.04
Docker: Docker รุ่น 1.13.1, สร้าง 092cba3
Kubernetes:

Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-02-15T06:40:50Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"1970-01-01T00:00:00Z", GoVersion:"go1.7.1", Compiler:"gc", Platform:"linux/amd64"}

หากมีใครสามารถช่วยฉันหาวิธีแก้ปัญหาที่ใช้นักเทียบท่าเพื่อทำสิ่งนี้มันยอดเยี่ยมมาก ขอบคุณ

แก้ไข:

โหลดภาพในeval $(minikube docker-env:

REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
fluxcapacitor/jupyterhub                              latest              e5175fb26522        4 weeks ago         9.59 GB
fluxcapacitor/zeppelin                                latest              fe4bc823e57d        4 weeks ago         4.12 GB
fluxcapacitor/prediction-pmml                         latest              cae5b2d9835b        4 weeks ago         973 MB
fluxcapacitor/scheduler-airflow                       latest              95adfd56f656        4 weeks ago         8.89 GB
fluxcapacitor/loadtest                                latest              6a777ab6167c        5 weeks ago         899 MB
fluxcapacitor/hdfs                                    latest              00fa0ed0064b        6 weeks ago         1.16 GB
fluxcapacitor/sql-mysql                               latest              804137671a8c        7 weeks ago         679 MB
fluxcapacitor/metastore-1.2.1                         latest              ea7ce8c5048f        7 weeks ago         1.35 GB
fluxcapacitor/cassandra                               latest              3cb5ff117283        7 weeks ago         953 MB
fluxcapacitor/apachespark-worker-2.0.1                latest              14ee3e4e337c        7 weeks ago         3.74 GB
fluxcapacitor/apachespark-master-2.0.1                latest              fe60b42d54e5        7 weeks ago         3.72 GB
fluxcapacitor/package-java-openjdk-1.8                latest              1db08965289d        7 weeks ago         841 MB
gcr.io/google_containers/kubernetes-dashboard-amd64   v1.5.1              1180413103fd        7 weeks ago         104 MB
fluxcapacitor/stream-kafka-0.10                       latest              f67750239f4d        2 months ago        1.14 GB
fluxcapacitor/pipeline                                latest              f6afd6c5745b        2 months ago        11.2 GB
gcr.io/google-containers/kube-addon-manager           v6.1                59e1315aa5ff        3 months ago        59.4 MB
gcr.io/google_containers/kubedns-amd64                1.9                 26cf1ed9b144        3 months ago        47 MB
gcr.io/google_containers/kube-dnsmasq-amd64           1.4                 3ec65756a89b        5 months ago        5.13 MB
gcr.io/google_containers/exechealthz-amd64            1.2                 93a43bfb39bf        5 months ago        8.37 MB
gcr.io/google_containers/pause-amd64           

คำตอบ:


408

ตามที่READMEอธิบายไว้คุณสามารถใช้ Docker daemon จาก Minikube ด้วยeval $(minikube docker-env)ซ้ำได้

หากต้องการใช้รูปภาพโดยไม่ต้องอัปโหลดคุณสามารถทำตามขั้นตอนเหล่านี้:

  1. ตั้งค่าตัวแปรสภาพแวดล้อมด้วย eval $(minikube docker-env)
  2. สร้างภาพด้วย Docker daemon ของ Minikube (เช่นdocker build -t my-image .)
  3. ตั้งภาพในข้อมูลจำเพาะของพ็อดเช่นแท็กสร้าง (เช่นmy-image)
  4. ตั้งค่าimagePullPolicyการNeverมิฉะนั้น Kubernetes จะพยายามดาวน์โหลดภาพ

หมายเหตุสำคัญ:คุณต้องใช้eval $(minikube docker-env)กับแต่ละเทอร์มินัลที่คุณต้องการใช้เนื่องจากจะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับเซสชันเชลล์ปัจจุบันเท่านั้น


1
AFAIS คุณเท่านั้นที่สามารถทำเช่นนั้นกับ minukube minikube start --disk-size 100gใหม่ที่มี วิธีการแก้ปัญหาอีกก็จะไปลบภาพเก่าด้วยและdocker images docker rmi
svenwltr

6
สำคัญมากที่ต้องจำให้ทำงานeval $(minikube docker-env)หลังจากปิดเทอร์มินัลที่คุณใช้งานอยู่ก่อนที่คุณจะพยายามสร้างภาพใหม่ ... เพิ่งเผา 6 ชั่วโมงต่อเนื่องกับภาพที่ไม่ได้อัปเดตใน minikube ... ดูเหมือนว่าแพคเกจไม่ได้อัปเดต .. จริงๆแล้วแค่ไม่อัปเดตรูปภาพที่ minikube อ้างอิงอยู่
Mike

1
นโยบายการดึงเริ่มต้นคือIfNotPresentสิ่งที่เราต้องทำคือการตั้งค่าตัวแปรสภาพแวดล้อม
Beygi

29
ถ้าหากอยากจะกลับมาหรือออกจาก env minikube ..eval $(minikube docker-env -u)
Budi Mulyo

1
@nmxl ดูที่นี่
testuser

175

อะไรที่ใช้งานได้สำหรับฉันตามวิธีแก้ปัญหาโดย @svenwltr:

# Start minikube
minikube start

# Set docker env
eval $(minikube docker-env)

# Build image
docker build -t foo:0.0.1 .

# Run in minikube
kubectl run hello-foo --image=foo:0.0.1 --image-pull-policy=Never

# Check that it's running
kubectl get pods

3
คุณสามารถหาเวอร์ชัน yml ของบรรทัดคำสั่งด้านบน (ในส่วนที่เกี่ยวกับ imagePullPolicy) ที่นี่: kubernetes.io/docs/concepts/containers/images
granadaCoder

127

คำตอบนี้ไม่ได้ จำกัด อยู่ที่ minikube!

ใช้รีจิสทรีในเครื่อง:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

ตอนนี้ติดแท็กรูปภาพของคุณอย่างถูกต้อง:

docker tag ubuntu localhost:5000/ubuntu

โปรดทราบว่า localhost ควรเปลี่ยนเป็นชื่อ dns ของเครื่องที่ใช้รีจิสตรีคอนเทนเนอร์

ตอนนี้ดันภาพของคุณไปที่รีจิสตรีท้องถิ่น:

docker push localhost:5000/ubuntu

คุณควรดึงมันกลับมาได้:

docker pull localhost:5000/ubuntu

ตอนนี้เปลี่ยนไฟล์ yaml ของคุณเพื่อใช้การลงทะเบียนโลคัล

คิดเกี่ยวกับการติดตั้งไดรฟ์ข้อมูลในตำแหน่งที่เหมาะสมเพื่อคงรูปในรีจิสทรี

อัปเดต:

ดังที่ Eli กล่าวไว้คุณจะต้องเพิ่มรีจิสตรีในเครื่องเป็นที่ไม่ปลอดภัยเพื่อที่จะใช้http (อาจใช้ไม่ได้เมื่อใช้ localhost แต่จะใช้หากใช้ชื่อโฮสต์โลคอล)

อย่าใช้ http ในการผลิตใช้ความพยายามในการรักษาความปลอดภัย


2
| ตอนนี้เปลี่ยนไฟล์ yaml ของคุณเพื่อใช้รีจิสทรีในเครื่อง คุณสามารถอธิบายสิ่งนี้ได้เล็กน้อยหรือไม่? ฉันผลักไปที่รีจิสทรีในเครื่อง (เคล็ดลับสุดยอด) แต่ฉันมีปัญหาเดียวกันกับที่ฉันไม่สามารถรับ minikube เพื่อเชื่อมต่อกับมัน
Zach Estela

3
@ZachEstela เปลี่ยนชื่อภาพใน yaml เป็น<registryIP>:5000/ubuntu
Farhad Farahi

@FarhadFarahi ฉันจะหา "ชื่อ DNS ของเครื่องที่ใช้รีจิสตรีคอนเทนเนอร์" ได้ที่ไหน
Daan

1
@FarhadFarahi ถ้าฉันให้แล็ปท็อปกับคุณคุณจะรู้ได้อย่างไร? ฉันแค่อยากรู้ ฉันทำตามขั้นตอนการสอนนักเทียบท่าเพื่อให้นักเทียบท่าทำงานบน windows
Daan

1
@FarhadFarahi: โปรดเพิ่มคำตอบของคุณว่าคุณจะต้องเพิ่มรีจิสตรีในพื้นที่ที่ไม่ปลอดภัยเพื่อที่จะใช้ http: docs.docker.com/registry/insecure (อาจใช้ไม่ได้เมื่อใช้ localhost แต่จะใช้ถ้าใช้ชื่อโฮสต์ในเครื่อง )
Eli Algranti

14

การเพิ่มคำตอบของ @Farhad ตามคำตอบนี้ ,

นี่คือขั้นตอนในการตั้งค่ารีจิสทรีในเครื่อง

ติดตั้งในเครื่องท้องถิ่น

ตั้งค่าชื่อโฮสต์ในเครื่องท้องถิ่น: แก้ไข/etc/hostsเพื่อเพิ่มบรรทัดนี้

docker.local 127.0.0.1

ตอนนี้เริ่มรีจิสตรีโลคัล (ลบ -d เพื่อเรียกใช้โหมดที่ไม่ใช่ daemon):

docker run -d -p 5000:5000 --restart=always --name registry registry:2

ตอนนี้ติดแท็กรูปภาพของคุณอย่างถูกต้อง:

docker tag ubuntu docker.local:5000/ubuntu

ตอนนี้ดันภาพของคุณไปที่รีจิสตรีท้องถิ่น:

docker push docker.local:5000/ubuntu

ตรวจสอบว่ามีการผลักภาพ:

curl -X GET http://docker.local:5000/v2/ubuntu/tags/list

ติดตั้งใน minikube

ssh เป็น minikube ด้วย: minukube ssh

แก้ไข/etc/hostsเพื่อเพิ่มบรรทัดนี้

docker.local <your host machine's ip>

ยืนยันการเข้าถึง:

curl -X GET http://docker.local:5000/v2/ubuntu/tags/list

ตอนนี้ถ้าคุณพยายามที่จะดึงคุณอาจได้รับข้อผิดพลาดการเข้าถึง http

เปิดใช้งานการเข้าถึงที่ไม่ปลอดภัย :

หากคุณวางแผนที่จะใช้ minkube กับการตั้งค่าท้องถิ่นนี้อยู่เสมอให้สร้าง minikube เพื่อใช้รีจิสตรีที่ไม่ปลอดภัยตามค่าเริ่มต้น (จะไม่ทำงานในคลัสเตอร์ที่มีอยู่)

minikube start --insecure-registry="docker.local:5000"

อื่นปฏิบัติตามขั้นตอนด้านล่าง:

systemctl stop docker

แก้ไขไฟล์นักเทียบท่า serice: รับเส้นทางจาก systemctl status docker

มันอาจจะเป็น :

/etc/systemd/system/docker.service.d/10-machine.conf หรือ /usr/lib/systemd/system/docker.service

ต่อท้ายข้อความนี้ (แทนที่ 192.168.1.4 ด้วย ip ของคุณ)

- นักรักษาความปลอดภัยรีจิสทรี docker.local: 5,000 - การรักษาความปลอดภัยรีจิสทรี 192.168.1.4/5000

ถึงบรรทัดนี้

ExecStart = / usr / bin / docker daemon -H tcp: //0.0.0.0: 2376 -H unix: ///var/run/docker.sock --tlsverify --tlscacert /etc/docker/ca.pem - tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem - ผู้ให้บริการป้ายชื่อ = virtualbox - virtualecure-registry 10.0.0.0/24

systemctl daemon-reload
systemctl start docker

ลองดึง:

docker pull docker.local:5000/ubuntu

ตอนนี้เปลี่ยนไฟล์ yaml ของคุณเพื่อใช้การลงทะเบียนโลคัล

  containers:
    - name: ampl-django
      image: dockerhub/ubuntu

ถึง

  containers:
    - name: ampl-django
      image: docker.local:5000/nymbleup

อย่าใช้ http ในการผลิตใช้ความพยายามในการรักษาความปลอดภัย


12

นอกเหนือจากคำตอบที่ยอมรับแล้วคุณยังสามารถบรรลุสิ่งที่คุณต้องการในตอนแรก (การสร้างการปรับใช้โดยใช้runคำสั่ง) ด้วยคำสั่งต่อไปนี้:

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 --generator=run-pod/v1 

ฉันพบข้อมูลเกี่ยวกับเครื่องกำเนิดไฟฟ้าในฟอรัม Kubernetes-dev:

หากคุณใช้kubectl runมันสร้างประจักษ์สำหรับคุณที่เกิดขึ้นจะมีการimagePullPolicyตั้งค่าให้Alwaysเป็นค่าเริ่มต้น คุณสามารถใช้คำสั่งนี้เพื่อรับimagePullPolicyของIfNotPresentซึ่งจะทำงานสำหรับminikube:

kubectl run --image=<container> --generator=run-pod/v1

แดนลอเรน

https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM


9

วิธีหนึ่งคือการสร้างภาพในเครื่องแล้วทำ:

docker save imageNameGoesHere | pv | (eval $(minikube docker-env) && docker load)

minikube docker-envอาจไม่ส่งคืนข้อมูลที่ถูกต้องซึ่งทำงานภายใต้ผู้ใช้อื่น / sudo sudo -u yourUsername minikube docker-envแต่คุณสามารถเรียกใช้

ควรส่งคืนสิ่งที่ชอบ:

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/chris/.minikube/certs"
export DOCKER_API_VERSION="1.23"
# Run this command to configure your shell:
# eval $(minikube docker-env)

คำสั่งที่ถูกต้องคือdocker save imageNameGoesHere > pv | (eval $(minikube docker-env) && docker load)
salvador

1
docker save imageNameGoesHere | (eval $(minikube docker-env) && docker load)ทำงานให้ฉัน
lhaferkamp

5

หากใครกำลังมองหาที่จะกลับมาสู่สภาพแวดล้อมท้องถิ่นหลังจากการตั้งค่า minikube env ใช้คำสั่งต่อไปนี้

eval $(docker-machine env -u)

โพสต์แล้วเป็นstackoverflow.com/questions/42564058/ …
Karl Richter

3
จะเป็น $ EVAL (minikube นักเทียบท่า-env -u) สำหรับ minikube
miracle_the_V

4

จากเอกสาร kubernetes:

https://kubernetes.io/docs/concepts/containers/images/#updating-images

นโยบายการดึงเริ่มต้นคือ IfNotPresent ซึ่งทำให้ Kubelet ข้ามการดึงภาพหากมีอยู่แล้ว หากคุณต้องการบังคับให้ดึงเสมอคุณสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้:

  • ตั้งค่า imagePullPolicy ของคอนเทนเนอร์เป็น Always;
  • ใช้: ล่าสุดเป็นแท็กสำหรับภาพที่จะใช้;
  • เปิดใช้งานตัวควบคุมการเข้าชม AlwaysPullImages

หรืออ่านวิธีอื่น: การใช้: แท็กล่าสุดบังคับให้ดึงภาพเสมอ หากคุณใช้eval $(minikube docker-env)ดังกล่าวข้างต้นแล้วไม่ใช้แท็กใด ๆ หรือกำหนดแท็กให้กับภาพในพื้นที่ของคุณคุณสามารถหลีกเลี่ยง Kubernetes ที่พยายามบังคับให้ดึงมัน



3

วิธีที่ง่ายกว่าที่จะตอบคำถามเดิม "วิธีใช้อิมเมจ docker แบบโลคัลกับ Minikube?" คือการบันทึกอิมเมจลงในไฟล์ tar และโหลดลงใน minikube:

# export the docker image to a tar file
docker save --output my-image.tar the.full.path.to/the/docker/image:the-tag
# set local environment variables so that docker commands go to the docker in minikube
eval $(minikube docker-env)
# or if on windows: @FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i
# import the docker image from the tar file into minikube
docker load --input my-image.tar
# cleanup - put docker back to normal
eval $(minikube docker-env -u)
# or if on windows: @FOR /f "tokens=*" %i IN ('minikube docker-env -u') DO @%i

จากนั้นเรียกใช้อิมเมจเกี่ยวข้องกับคำสั่งดังต่อไปนี้ ตรวจสอบให้แน่ใจว่าได้รวมพารามิเตอร์ "--image-pull-policy = Never"

kubectl run my-image --image=the.full.path.to/the/docker/image:the-tag --image-pull-policy=Never --port=80

อธิบายได้ดีทำงานเหมือนมีเสน่ห์ ฉันเท่านั้นที่มีการเรียกdocker saveด้วยsudoและจากนั้นตั้งsudo chmod 664 my-image.tarจะทำให้มันใช้ได้สำหรับผู้ใช้ปัจจุบันของฉัน
เมียร์กาบาย

นี่ควรเป็นวิธีที่เร็วที่สุดที่ฉันเชื่อ
Shiwakant Bharti

2

หากต้องการเพิ่มคำตอบก่อนหน้านี้หากคุณมีภาพ tarball คุณสามารถโหลดไปที่ชุดภาพในตัวนักเทียบท่าในพื้นที่docker image load -i /path/image.tarโปรดจำไว้ว่าให้เรียกใช้หลังจาก eval $(minikube docker-env)นั้นเนื่องจาก minikube ไม่ได้แชร์ภาพกับเครื่องมือนักเทียบท่าที่ติดตั้งในเครื่อง


2

คำตอบอื่น ๆ สมมติว่าคุณใช้ minikube กับ VM ดังนั้นรูปภาพท้องถิ่นของคุณจึงไม่สามารถเข้าถึงได้จาก minikube VM

ในกรณีที่คุณใช้ minikube ด้วย--vm-driver=noneคุณสามารถนำภาพในเครื่องกลับมาใช้ใหม่ได้อย่างง่ายดายโดยการตั้งค่าimage_pull_policyเป็นไม่:

kubectl run hello-foo --image=foo --image-pull-policy=Never

หรือการตั้งค่าimagePullPolicyฟิลด์สำหรับ cotainers ใน.yamlรายการที่สอดคล้องกัน


2

แนวคิดหนึ่งก็คือการบันทึกภาพนักเทียบท่าในเครื่องแล้วโหลดลงใน minikube ดังนี้:

ตัวอย่างเช่นสมมติว่าคุณมีภาพ puckel / docker-airflow แล้ว

  1. บันทึกภาพนั้นลงในดิสก์ภายในเครื่อง -

    docker save puckel/docker-airflow > puckel_docker_airflow.tar

  2. ตอนนี้เข้าสู่ minikube docker env -

    eval $(minikube docker-env)

  3. โหลดภาพที่บันทึกไว้ในเครื่อง -

    docker load < puckel_docker_airflow.tar

มันง่ายและใช้งานได้อย่างมีเสน่ห์


Set the imagePullPolicy to Neverคุณยังคงต้องเคล็ดลับคำตอบที่ได้รับการยอมรับของ หากภาพของคุณถูกแท็กด้วยที่อยู่เช่นus.icr.io/mydiv/my-service:v0.0.1นั้นการปรับใช้จะพยายามดึงภาพนี้จากระยะไกล เนื่องจากคุณคัดลอกภาพด้วยตนเองแล้วคุณจะต้องระงับ k8s จากการดึงภาพจากที่อยู่ (การลงทะเบียนคอนเทนเนอร์) ซึ่งไม่สามารถเข้าถึงได้
colm.anseo

1

เกิดอะไรขึ้นถ้าคุณสามารถเรียกใช้ k8s ภายใน vm ของนักเทียบท่า? มีการสนับสนุนในเรื่องนี้ด้วยเดสก์ท็อปนักเทียบท่ารุ่นล่าสุด ... คุณเพียงแค่ต้องเปิดใช้งานการสนับสนุนนั้น

https://www.docker.com/blog/kubernetes-is-now-available-in-docker-desktop-stable-channel/ https://www.docker.com/blog/docker-windows-desktop-now- Kubernetes /

ฉันพบสิ่งนี้ได้อย่างไร:

ในขณะที่อ่านเอกสารเพื่อใช้เป็นหางเสือพวกเขาจะสอนวิธีการติดตั้ง minikube โดยย่อ บทช่วยสอนที่ติดตั้ง minikube ใน vm ที่แตกต่าง / แยกจากนักเทียบท่า

ดังนั้นเมื่อถึงเวลาต้องติดตั้งชาร์ตหางเสือของฉันฉันไม่สามารถรับ helm / k8s เพื่อดึงภาพที่ฉันสร้างขึ้นโดยใช้นักเทียบท่า นั่นเป็นวิธีที่ฉันมาถึงที่นี่ในคำถามนี้

ดังนั้น ... หากคุณสามารถใช้ชีวิตร่วมกับ k8 รุ่นใดก็ได้ที่มาพร้อมกับเดสก์ท็อปนักเทียบท่าและคุณสามารถใช้ชีวิตอยู่กับมันได้ในทุก ๆ vm docker ดังนั้นบางทีโซลูชันนี้อาจจะง่ายกว่ารุ่นอื่น ๆ เล็กน้อย

ข้อจำกัดความรับผิดชอบ: ไม่แน่ใจว่าการสลับระหว่างคอนเทนเนอร์ของ windows / linux จะส่งผลกระทบอย่างไร


ฉันคิดว่าฉันยังมีการตั้ง imagePullPolicies เพื่อ IfNotPresent เช่นกัน
ชาด

1

มีวิธีหนึ่งในการเขียนเรียงความและวิธีที่มีประสิทธิภาพในการส่งภาพ Docker ในพื้นที่ของคุณโดยตรงไปยัง minikube ซึ่งจะช่วยประหยัดเวลาจากการสร้างภาพใน minikube อีกครั้ง

minikube cache add <Image name>

รายละเอียดเพิ่มเติม ที่นี่

วิธีการที่เป็นไปได้ทั้งหมดในการส่งภาพไปยัง minikube อยู่ที่นี่: https://minikube.sigs.k8s.io/docs/handbook/pushing/


0

คุณสามารถนำเปลือก docker กลับมาใช้ใหม่eval $(minikube docker-env)หรือคุณสามารถใช้ประโยชน์จากdocker save | docker loadทั่วทั้งเชลล์ได้


0
  1. การตั้งค่า minikube docker-env
  2. สร้างอิมเมจเดียวกันอีกครั้ง (โดยใช้ minikube docker-env)
  3. เปลี่ยน imagePullPolicy เป็นNeverในการปรับใช้ของคุณ

ที่จริงแล้วสิ่งที่เกิดขึ้นที่นี่ Minikube ของคุณไม่สามารถจำนักเทียบท่า daemon ได้เนื่องจากเป็นบริการที่เป็นอิสระคุณต้องตั้งค่าสภาพแวดล้อม minikube-docker ของคุณก่อนใช้คำสั่งด้านล่างเพื่อตรวจสอบ

 "eval $(minikube docker-env)"

หากคุณเรียกใช้คำสั่งด้านล่างมันจะแสดงที่ minikube ของคุณมองหานักเทียบท่า

~$ minikube docker-env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.37.192:2376"
export DOCKER_CERT_PATH="/home/ubuntu/.minikube/certs"
export MINIKUBE_ACTIVE_DOCKERD="minikube"

**# To point your shell to minikube's docker-daemon, run:**
# eval $(minikube -p minikube docker-env)

คุณต้องสร้างรูปภาพใหม่อีกครั้งเมื่อคุณตั้งค่า minikube docker-env มิฉะนั้นจะล้มเหลว



0

ขั้นตอนในการรันภาพ docker แบบโลคัลใน kubernetes
1. eval $ (minikube -p minikube docker-env)
2. ในไฟล์ Artifact ภายใต้ส่วน spec -> คอนเทนเนอร์
เพิ่ม imagePullPolicy: IfNotPresent
หรือ imagePullPolicy: ไม่

apiVersion: "v1"
kind: Pod
metadata:
    name: web
    labels:
        name: web
        app: demo
spec:
    containers:
        - name: web
          image: web:latest
          imagePullPolicy: IfNotPresent
          ports:
              - containerPort: 5000
                name: http
                protocol: TCP


3. จากนั้นเรียกใช้ kubectl create -f <filename>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.