কোনও নির্দিষ্ট ট্যাগযুক্ত ডকার চিত্র স্থানীয়ভাবে উপস্থিত কিনা তা কীভাবে পরীক্ষা করবেন?


116

আমি সন্ধান করতে চাই যে একটি নির্দিষ্ট ট্যাগযুক্ত একটি ডকার চিত্র স্থানীয়ভাবে উপস্থিত রয়েছে। ডকার ক্লায়েন্ট যদি স্থানীয়ভাবে এটি না করতে পারে তবে আমি ব্যাশ স্ক্রিপ্ট ব্যবহার করে ভাল।

সম্ভাব্য বাশ স্ক্রিপ্টের জন্য কিছু docker imagesনির্দেশনা সরবরাহ করতে কমান্ড চালানোর ফলে নিম্নলিখিতটি ফিরে আসে:

REPOSITORY                               TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
rabbitmq                                 latest              e8e654c05c91        5 weeks ago         143.5 MB
busybox                                  latest              8c2e06607696        6 weeks ago         2.433 MB
rabbitmq                                 3.4.4               a4fbaad9f996        11 weeks ago        131.5 MB

উত্তর:


159

আমি সাধারণত docker images -q( এই স্ক্রিপ্ট হিসাবে ) ফলাফল পরীক্ষা করি :

if [[ "$(docker images -q myimage:mytag 2> /dev/null)" == "" ]]; then
  # do something
fi

কিন্তু যেহেতু docker imagesকেবল নেয়REPOSITORY প্যারামিটার হিসাবে নেওয়া হয় তাই আপনার ট্যাগ না করে ব্যবহার করা উচিত p-q

docker images এখন ট্যাগ নেয় (ডক্কার 1.8+) [REPOSITORY[:TAG]]

নীচে উল্লিখিত অন্য পদ্ধতিটি ডকার ইন্সপেক্ট ব্যবহার করা ।
তবে ডকার 17+ এর সাথে চিত্রগুলির সিনট্যাক্সটি হ'ল docker image inspect(অস্তিত্বহীন চিত্রের উপর, প্রস্থান স্থিতিটি অ -0 হবে )

দ্বারা হিসাবে উল্লিখিত iTayb মধ্যে মন্তব্য :

  • docker images -qপদ্ধতি ইমেজ প্রচুর সঙ্গে একটি মেশিনে সত্যিই ধীর পেতে পারেন। এটি 6,500 চিত্রের মেশিনে চালাতে 44s সময় নেয়।
  • docker image inspectঅবিলম্বে আয়।

1
হুম নিশ্চিত নয় যে এটি ট্যাগগুলির জন্য কাজ করে? আমি যখন "ডকার ইমেজ -Q খরগোশ" করি তখন এটি "e8e654c05c91 এবং a4fbaad9f996" প্রদান করে তবে আমি যদি "ডকার ইমেজ -q খরগোশক: 3.4.4" করি তবে ট্যাগটি উপস্থিত থাকলেও কিছুই ফিরে আসে না।
জোহান

@ জোহন যদিও ট্যাগটি স্থানীয়ভাবে উপস্থিত রয়েছে?
ভনসি

@ জোহান আমি কেবল ডাবল-চেক করেছি এবং ডকারের চিত্রগুলির পরামিতিগুলি কেবল রেপো নেয়, ট্যাগ নয়। বিকল্প সমাধানের প্রস্তাব দেওয়ার জন্য আমি উত্তরটি সম্পাদনা করেছি।
ভনসি 30'15

1
ধন্যবাদ যে কাজ মনে হচ্ছে। তবে সম্ভবত আপনার উত্তরটি সম্পাদনা করা উচিত এবং আমি গ্রহণ করার আগে ": মাইটাগ" থেকে ": মাইটাগ" সরিয়ে ফেলতে হবে?
জোহান

নতুনদের জন্য: কোনও চিত্র (মাইমেজ) এবং একটি ট্যাগ (মাইটাগ) এর মধ্যে আলাদা কী? মাইমাজেজ: শুধু মাইটাগের পরিবর্তে মাইটাগ?
আলেকজান্ডার মিলস 9

36

docker inspectউদাহরণস্বরূপ চেষ্টা করুন :

$ docker inspect --type=image treeder/hello.rb:nada
Error: No such image: treeder/hello.rb:nada
[]

তবে এখন বিদ্যমান একটি চিত্রের সাথে আপনি একগুচ্ছ তথ্য পাবেন, যেমন:

$ docker inspect --type=image treeder/hello.rb:latest
[
{
    "Id": "85c5116a2835521de2c52f10ab5dda0ff002a4a12aa476c141aace9bc67f43ad",
    "Parent": "ecf63f5eb5e89e5974875da3998d72abc0d3d0e4ae2354887fffba037b356ad5",
    "Comment": "",
    "Created": "2015-09-23T22:06:38.86684783Z",
    ...
}
]

এবং এটি একটি দুর্দান্ত জসন ফর্ম্যাটে।


6
এটি সর্বাধিক স্ক্রিপ্টযোগ্য উত্তর।
মাইকেল কোল

2
প্রকৃতপক্ষে, imagesএবং psকমান্ডগুলি সর্বদা 0 দিয়ে প্রস্থান হয়, inspectএটি এর docker inspect "${image_id}:${image_tag}" > /dev/null 2>&1 || echo "does not exist!"
এরিক ড্যানেনবার্গ

docker inspectশূন্য-বিহীন রিটার্ন কোডের কারণে কোনও চিত্র উপস্থিত না থাকায় দুর্দান্ত।
কাপলিনেটর

এটাও অনেক দ্রুত তারপর docker images -q
আইটিব

26

tldr:

docker image inspect myimage:mytag

প্রদর্শনের মাধ্যমে ...

সাফল্য, চিত্র পাওয়া গেছে:

$ docker image pull busybox:latest
latest: Pulling from library/busybox
Digest: sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f
Status: Image is up to date for busybox:latest

$ docker image inspect busybox:latest >/dev/null 2>&1 && echo yes || echo no
yes

ব্যর্থতা, অনুপস্থিত চিত্র:

$ docker image rm busybox:latest
Untagged: busybox:latest
Untagged: busybox@sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f

$ docker image inspect busybox:latest >/dev/null 2>&1 && echo yes || echo no
no

রেফারেন্স:

https://docs.docker.com/engine/reference/commandline/image_inspect/


এটি ছিল সোজা, দ্রুত এবং ভবিষ্যতের সাথে সামঞ্জস্যপূর্ণ। আমি এই সমাধান আটকে থাকব।
MarAvFe

17

আপনি নিম্নলিখিতগুলির মতো ব্যবহার করতে পারেন:

[ ! -z $(docker images -q someimage:sometag) ] || echo "does not exist"

বা:

[ -z $(docker images -q someimage:sometag) ] || echo "already exists"

6
কমপক্ষে ম্যাকোএসে, কাজ করে না, ফেরতের মান সর্বদা 0 থাকে
গ্যাবর সিসার্ডি

1
কোডটি সঠিক এবং লিনাক্সে কাজ করে। কেবলমাত্র আমি যুক্ত করব সাবশেল কমান্ডের উদ্ধৃতি
ড্রাইকেন

3

সাহায্যে Vonc এর উত্তর আমি উপরের নামে নিম্নলিখিত ব্যাশ স্ক্রিপ্ট নির্মিত check.sh:

#!/bin/bash
image_and_tag="$1"
image_and_tag_array=(${image_and_tag//:/ })
if [[ "$(docker images ${image_and_tag_array[0]} | grep ${image_and_tag_array[1]} 2> /dev/null)" != "" ]]; then
  echo "exists"
else
  echo "doesn't exist"
fi

এটি বিদ্যমান চিত্র এবং ট্যাগের জন্য ব্যবহার করে মুদ্রণ করা হবে exists, উদাহরণস্বরূপ:

./check.sh rabbitmq:3.4.4

এটি অ-বিদ্যমান চিত্র এবং ট্যাগের জন্য ব্যবহার করে মুদ্রণ করা হবে doesn't exist, উদাহরণস্বরূপ:

./check.sh rabbitmq:3.4.3


2

আপনি যদি ডকার রেজিস্ট্রি থেকে ডকার ইমেজ সন্ধান করার চেষ্টা করছেন তবে আমি অনুমান করি যে ডকার চিত্রটি উপস্থিত রয়েছে কিনা তা যাচাই করার সহজতম উপায়টি ডকার ভি 2 আরএসটি এপিআই ট্যাগগুলির তালিকা পরিষেবাটি ব্যবহার করে হয় কিনা

উদাহরণ: -

curl $CURLOPTS -H "Authorization: Bearer $token" "https://hub.docker.com:4443/v2/your-repo-name/tags/list"

যদি উপরের ফলাফলটি চিত্র ট্যাগগুলির একটি তালিকা সহ 200 ওকে ফেরত দেয়, তবে আমরা জানি যে চিত্রটি বিদ্যমান

{"name":"your-repo-name","tags":["1.0.0.1533677221","1.0.0.1533740305","1.0.0.1535659921","1.0.0.1535665433","latest"]}

অন্যথায় যদি আপনি কিছু দেখতে পান

{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"your-repo-name"}}]} 

তবে আপনি নিশ্চিতভাবে জানবেন যে চিত্রটির অস্তিত্ব নেই।


2

বাশ স্ক্রিপ্টে আমি ট্যাগটি দিয়ে ছবিটি উপস্থিত কিনা তা পরীক্ষা করতে এটি করি:

IMAGE_NAME="mysql:5.6"

if docker image ls -a "$IMAGE_NAME" | grep -Fq "$IMAGE_NAME" 1>/dev/null; then
echo "could found image $IMAGE_NAME..."
fi

উপরে লিপি স্ক্রিপ্ট 5.6 ট্যাগ সহ mysql চিত্র বিদ্যমান কিনা তা পরীক্ষা করে দেখুন Example যদি আপনি কেবল পরীক্ষা করতে চান যে কোনও মাইএসকিএল চিত্র নির্দিষ্ট সংস্করণ ব্যতীত উপস্থিত রয়েছে তবে কেবল ট্যাগ ছাড়াই সংগ্রহস্থলের নামটি পাস করুন:

IMAGE_NAME="mysql"

0

আমার থেকে খুব ভাল পাঠকদের কাছে কিছুটা:

বিল্ড

#!/bin/bash -e
docker build -t smpp-gateway smpp
(if  [ $(docker ps -a | grep smpp-gateway | cut -d " " -f1) ]; then \
  echo $(docker rm -f smpp-gateway); \
else \
  echo OK; \
fi;);
docker run --restart always -d --network="host" --name smpp-gateway smpp-gateway:latest

ঘড়ি

docker logs --tail 50 --follow --timestamps smpp-gateway

চালান

sudo docker exec -it \
$(sudo docker ps | grep "smpp-gateway:latest" | cut -d " " -f1) \
/bin/bash

0

নির্দিষ্ট ট্যাগ নামের জন্য

$ docker images  --filter reference='<REPOSITORY>:TAG'

"ক্লজের মতো" ট্যাগ নামটির জন্য: my_image_tag -> আমার_আইমা শুরু করুন *

$ docker images  --filter reference='<REPOSITORY>:my_ima*'

যদি আপনি উদাহরণস্বরূপ "চিত্রটি" কিছু করতে চান তবে সমস্ত চিত্র মোছা মুছুন "আমার_ইমা" শুরু করে দেখুন

docker rmi -f $(docker images -q  --filter reference='myreponame:my_ima*')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.