ডকফায়াইলের সাথে ক্লোন প্রাইভেট গিট রেপো


240

আশেপাশের বিভিন্ন ওয়ার্কিং ডকফায়িলগুলি যা বলে মনে হচ্ছে তা থেকে আমি এই কোডটি অনুলিপি করেছি, এটি আমার:

FROM ubuntu

MAINTAINER Luke Crooks "luke@pumalo.org"

# Update aptitude with new repo
RUN apt-get update

# Install software 
RUN apt-get install -y git python-virtualenv

# Make ssh dir
RUN mkdir /root/.ssh/

# Copy over private key, and set permissions
ADD id_rsa /root/.ssh/id_rsa
RUN chmod 700 /root/.ssh/id_rsa
RUN chown -R root:root /root/.ssh

# Create known_hosts
RUN touch /root/.ssh/known_hosts

# Remove host checking
RUN echo "Host bitbucket.org\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config

# Clone the conf files into the docker container
RUN git clone git@bitbucket.org:Pumalo/docker-conf.git /home/docker-conf

এটি আমাকে ত্রুটি দেয়

Step 10 : RUN git clone git@bitbucket.org:Pumalo/docker-conf.git /home/docker-conf
 ---> Running in 0d244d812a54
Cloning into '/home/docker-conf'...
Warning: Permanently added 'bitbucket.org,131.103.20.167' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
2014/04/30 16:07:28 The command [/bin/sh -c git clone git@bitbucket.org:Pumalo/docker-conf.git /home/docker-conf] returned a non-zero code: 128

এটি আমার প্রথমবারের মতো ডকস্পিল ব্যবহার করে, তবে যা পড়েছি তা থেকে (এবং ওয়ার্কিং কনফিগারেশন থেকে নেওয়া) আমি দেখতে পাচ্ছি না কেন এটি কাজ করে না।

আমার আইডি_আর্সা আমার ডকস্পাইল হিসাবে একই ফোল্ডারে এবং আমার স্থানীয় কীটির অনুলিপি যা এই রেপোটিকে কোনও সমস্যা করতে পারে না।

সম্পাদনা:

আমার ডকস্পাইলে আমি যুক্ত করতে পারি:

RUN cat /root/.ssh/id_rsa

এবং এটি সঠিক কীটি প্রিন্ট করে, তাই আমি জানি এটির সঠিকভাবে অনুলিপি করা হচ্ছে।

নোহের পরামর্শ অনুসারে এবং দৌড়ে যাওয়ার মতো চেষ্টা করার চেষ্টা করেছি:

RUN echo "Host bitbucket.org\n\tIdentityFile /root/.ssh/id_rsa\n\tStrictHostKeyChecking no" >> /etc/ssh/ssh_config

দুর্ভাগ্যক্রমে এটিও কাজ করে না।

উত্তর:


300

আমার কীটি পাসওয়ার্ড সুরক্ষিত ছিল যা সমস্যার সৃষ্টি করছে, একটি ওয়ার্কিং ফাইল এখন নীচে তালিকাভুক্ত করা হয়েছে (ভবিষ্যতের গুগলারের সহায়তার জন্য)

FROM ubuntu

MAINTAINER Luke Crooks "luke@pumalo.org"

# Update aptitude with new repo
RUN apt-get update

# Install software 
RUN apt-get install -y git
# Make ssh dir
RUN mkdir /root/.ssh/

# Copy over private key, and set permissions
# Warning! Anyone who gets their hands on this image will be able
# to retrieve this private key file from the corresponding image layer
ADD id_rsa /root/.ssh/id_rsa

# Create known_hosts
RUN touch /root/.ssh/known_hosts
# Add bitbuckets key
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts

# Clone the conf files into the docker container
RUN git clone git@bitbucket.org:User/repo.git

11
কেবলমাত্র ক্ষেত্রে, কীটির পাসওয়ার্ড সুরক্ষা কীভাবে সরিয়ে ফেলতে হবে তার বর্ণনা এখানে একটি লিঙ্ক
থমাস

82
কেবলমাত্র একটি এফওয়াইআই, আপনি চালানোর পরে আরএনএস-কিসকেন বিটবুকিট.আরটি >> /root/.ssh/علوم_hosts, চিত্রটি স্তর হিসাবে এটি সংরক্ষণ করবে। যদি কেউ আপনার চিত্র ধরে রাখে তবে তারা কীটি পুনরুদ্ধার করতে পারে ... আপনি যদি পরবর্তী ফাইলটিতে সেই ফাইলটি মুছলেও, খ / সি আপনি এটি যুক্ত করার পরে তারা Step ধাপে ফিরে যেতে পারেন।
বার্নি পেরেজ

23
সহায়ক উত্তরের জন্য ধন্যবাদ। তবে আমাদের জন্য বিল্ডটি এলোমেলোভাবে ব্যর্থ হয়েছিল এবং তদন্তের পরে আমরা লক্ষ্য করেছি যে ssh-keyscan5 সেকেন্ডের একটি ডিফল্ট সময়সীমা রয়েছে যা বিটবাকেট প্রায়শই ছাড়িয়ে যায়। ssh-keyscanএমনকি একটি ত্রুটি রিপোর্ট করবেন না। RUN ssh-keyscan -T 60 bitbucket.org >> /root/.ssh/known_hostsনিরাপদে থাকার জন্য তাই ভাল রান ।
ফ্লুইডসোনিক

5
কেউ ব্যাখ্যা করতে পারে যে দৌড় কেন ssh-keyscanএকটি সমস্যা? আমার বোধগম্যতা এটি সহজেই গিথুব / বিটবকেটের পাবলিক কীটি টানবে। কোনও বিকল্পটি কীভাবে ব্যবহার করা যেতে পারে যাতে এটি একটি স্তরে শেষ না হয়?
পেড্রো

9
@ পেড্রো বিশেষত কী স্ক্যানটি কোনও বিষয় নয়, আপনি স্পষ্টভাবে ঠিক বলেছেন। যদি কিছু হয় তবে এই হোস্ট পাবলিক কীগুলি যথাসম্ভব ছড়িয়ে দেওয়া উচিত। known_hostsফাইলে বিশদ জানতে sshd (8) দেখুন । লোকেরা এলোমেলো জিনিসগুলিকে পর্যাপ্ত পরিমাণে উদ্বেগজনক বলে মনে হয়।
টনি

99

সেই ডকার ইমেজের জন্য আপনার নতুন এসএসএইচ কী তৈরি করা উচিত, কারণ আপনি সম্ভবত নিজের ব্যক্তিগত কীটি এখানে এম্বেড করতে চান না। এটিকে কাজ করতে, আপনাকে সেই গিটারটি আপনার গিট সংগ্রহস্থলের ডিপোরিয়মেন্ট কীগুলিতে যুক্ত করতে হবে। এখানে সম্পূর্ণ রেসিপি:

  1. ssh-keygen -q -t rsa -N '' -f repo-keySsh কী তৈরি করুন যার সাহায্যে আপনাকে রেপো-কী এবং repo-key.pub ফাইলগুলি দেওয়া হবে।

  2. আপনার সংগ্রহস্থল স্থাপন কীগুলিতে repo-key.pub যুক্ত করুন।
    গিটিহাব-এ, [আপনার ভাণ্ডার] -> সেটিংস -> কী স্থাপন করুন

  3. আপনার ডকফাইলে এ জাতীয় কিছু যুক্ত করুন:

    অ্যাডো রেপো-কি /
    চলমান \
      chmod 600 / রেপো-কি এবং& \  
      প্রতিধ্বনি "আইডেন্টিটি ফাইল / রেপো-কি" >> / ইত্যাদি / এসএসএস / এসএস_কনফিগ এবং& \  
      প্রতিধ্বনি-e "স্ট্রাইকটহস্টকি চেকিং নেই" >> / ইত্যাদি / এসএসএস / এসএস_কনফিগ এবং& \  
      // আপনার গিট ক্লোন কমান্ড এখানে ...
    

নোট করুন যে উপরে স্ট্রাইকটহস্টকিচেকিং বন্ধ রয়েছে, সুতরাং আপনার .ssh / জ্ঞাত_হোস্টগুলির দরকার নেই। যদিও আমি সম্ভবত উপরের উত্তরগুলির মধ্যে এসএস-কিস্ক্যান সহ আরও সমাধান পছন্দ করি।


6
সতর্কতা: আমার কনফিগারেশনে, ইকো -e "..." ফাইলের অভ্যন্তরেও লিখুন। কেবল পতাকাটি সরান এবং এটি সূক্ষ্মভাবে কাজ করে।
কনচিলেক্ল্যাটার

আপনার উত্তর আমাকে আমার সমস্যা সমাধানে সহায়তা করার ক্ষেত্রে একেবারে নিখুঁত ছিল। ধন্যবাদ!
ডেভিড পয়েন্টার

আমার এখনও একই সমস্যা রয়েছে:fatal: Could not read from remote repository.
অ্যালেক্স

1
আপনাকে লক্ষ লক্ষ ধন্যবাদ! আমি আপনাকে ভালবাসা ঘোষণা করার ধারে। আপনি একটি সমস্যার সমাধান করেছি যা আমি কয়েকদিন ধরে লড়াই করে যাচ্ছিলাম!
আলেকজান্দ্রা

এই প্রশ্নের জন্য নির্বাচিত উত্তরটি এখন আর ভাল উত্তর নয়। এটি 2014 সালে সঠিক ছিল তবে 2020 এর জন্য এটি সঠিক উত্তর answer
বিকাশ বাসনেট

70

এসএসএস কনফিগারেশনগুলি নিয়ে চারদিকে ঝাঁকুনির দরকার নেই। একটি কনফিগারেশন ফাইল (কোনও ডকফাইফাইল নয়) ব্যবহার করুন যাতে পরিবেশের ভেরিয়েবল রয়েছে এবং শেল স্ক্রিপ্টটি আপনার ডক ফাইলটি রানটাইম আপডেট করে। আপনি আপনার ডকফিলিলের বাইরে টোকেন রাখেন এবং আপনি https এ ক্লোন করতে পারেন (এসএসএস কীগুলি উত্পন্ন করার বা পাস করার দরকার নেই)।

সেটিংস> ব্যক্তিগত প্রবেশের টোকেনগুলিতে যান

  • repoসুযোগ সক্ষম করার সাথে একটি ব্যক্তিগত অ্যাক্সেস টোকেন তৈরি করুন ।
  • এর মতো ক্লোন করুন: git clone https://MY_TOKEN@github.com/user-or-org/repo

কিছু মন্তব্যকারী উল্লেখ করেছেন যে আপনি যদি একটি ভাগ করা ডকফেরফিল ব্যবহার করেন তবে এটি আপনার প্রকল্পের অন্যান্য ব্যক্তির কাছে আপনার অ্যাক্সেস কীটি প্রকাশ করতে পারে। যদিও এটি আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে উদ্বেগের কারণ হতে পারে বা নাও হতে পারে, আপনি তার সাথে মোকাবেলা করতে পারেন এমন কয়েকটি উপায় এখানে রয়েছে:

  • আর্গুমেন্টগুলি গ্রহণ করতে শেল স্ক্রিপ্ট ব্যবহার করুন যা আপনার কীটি ভেরিয়েবল হিসাবে থাকতে পারে। আপনার ডকফেরলে একটি পরিবর্তনশীল প্রতিস্থাপন করুন sedবা অনুরূপ, অর্থাত্ স্ক্রিপ্টটি কল করে sh rundocker.sh MYTOKEN=fooযা প্রতিস্থাপন করবে https://{{MY_TOKEN}}@github.com/user-or-org/repo। নোট করুন যে আপনি কনফিগারেশন ফাইলও ব্যবহার করতে পারেন (। এমএল বা আপনি যে কোনও বিন্যাসে চান) একই কাজ করতে পারেন তবে পরিবেশের ভেরিয়েবলগুলি।
  • কেবলমাত্র সেই প্রকল্পের জন্য একটি গিথব ব্যবহারকারী তৈরি করুন (এবং এর জন্য অ্যাক্সেস টোকেন তৈরি করুন)

আপনি কোন প্রসঙ্গে কথা বলছেন Settings > Applications?
টার্বোলেডেন

1
এই পদ্ধতির খারাপ দিকটি হ'ল আপনি @ ক্রোকসির পদ্ধতির বিপরীতে ডকফাইফিলের মধ্যে একটি প্রাইভেট রেপোর জন্য শংসাপত্র সংরক্ষণ করছেন যা আপনাকে কোনও ডকফাইফাইল থেকে পৃথকভাবে সঞ্চিত কী ব্যবহার করার অনুমতি দেবে। ওপি কীভাবে ডকফাইফিলকে সংরক্ষণ করছে সে সম্পর্কে প্রসঙ্গ ছাড়াই আমরা নির্ধারণ করতে পারি না যে এটির কারণে কোনও সমস্যা রয়েছে কিনা তবে ব্যক্তিগত অভিজ্ঞতা থেকে আমি আমার ডকফিলিটিগুলিকে একটি ভিসিএসের মধ্যে সংরক্ষণ করতে চাই এবং এতে কোনও শংসাপত্র থাকতে চাই না। একবার ডকার কমান্ড বানাতে env ভেরিয়েবলগুলি পাস করার দক্ষতা প্রয়োগ করলে আমি সম্মত হই যে এটিই সবচেয়ে পরিষ্কার সমাধান হবে।
জাব্লস্ল্যাড

2
স্থানীয়ভাবে স্থানীয়ভাবে ক্যালভিনফ্রয়েজ আমি ধরে নিয়েছি যে আপনি আপনার হোস্টটি বোঝাচ্ছেন? আমি হোস্টের পরিবেশের পরিবর্তনশীলগুলি নির্মানের সময় একটি ধারকটিতে প্রকাশ করার উপায় সম্পর্কে অবগত নই, এই কারণেই আমাদের কাছে এই github.com/docker/docker/issues/6822 এর মতো মুক্ত সমস্যা রয়েছে । আপনি কি স্পষ্ট করতে পারেন?
জাব্লস্ল্যাড

1
এমনকি ক্লিনার (উদ্বেগের বিভাজন): ক্লোন করা রেপোর জন্য একটি লিঙ্কযুক্ত ভলিউম + শুধুমাত্র ক্লোনিং টাস্কের জন্য একটি উত্সর্গীকৃত ধারক + কেবল এসএসএইচ কী (বা আপনার পরামর্শ অনুসারে টোকেন) এর সাথে একটি লিঙ্কযুক্ত ভলিউম। স্ট্যাকওভারফ্লো . com / a / 30992047 দেখুন , সম্ভবত স্ট্যাকওভারফ্লো . com/a/29981990 এর সাথে মিলিত ।
পিটারিনো

9
এছাড়াও প্রশ্নটি একটি বিটবুকেট রেপোর জন্য, গিথুব রেপোর জন্য নয়।
মাইকেল

25

আরেকটি বিকল্প হ'ল আপনার এসএসএইচ কীগুলি চূড়ান্ত চিত্রটিতে অন্তর্ভুক্ত না করা হয়েছে তা নিশ্চিত করার জন্য একটি মাল্টি-স্টেজ ডকার বিল্ড ব্যবহার করা।

আমার পোস্টে বর্ণিত হিসাবে আপনি গিট ক্লোন করতে প্রয়োজনীয় নির্ভরতা এবং তারপরে COPYপ্রয়োজনীয় ফাইলগুলি আপনার চূড়ান্ত চিত্রের সাথে আপনার মধ্যবর্তী চিত্র প্রস্তুত করতে পারেন ।

অতিরিক্ত হিসাবে আমরা যদি LABELআমাদের মাঝারি স্তরগুলি করি, আমরা শেষ হয়ে গেলে এমনকি তাদের মেশিন থেকে মুছতে পারি।

# Choose and name our temporary image.
FROM alpine as intermediate
# Add metadata identifying these images as our build containers (this will be useful later!)
LABEL stage=intermediate

# Take an SSH key as a build argument.
ARG SSH_KEY

# Install dependencies required to git clone.
RUN apk update && \
    apk add --update git && \
    apk add --update openssh

# 1. Create the SSH directory.
# 2. Populate the private key file.
# 3. Set the required permissions.
# 4. Add github to our list of known hosts for ssh.
RUN mkdir -p /root/.ssh/ && \
    echo "$SSH_KEY" > /root/.ssh/id_rsa && \
    chmod -R 600 /root/.ssh/ && \
    ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts

# Clone a repository (my website in this case)
RUN git clone git@github.com:janakerman/janakerman.git

# Choose the base image for our final image
FROM alpine

# Copy across the files from our `intermediate` container
RUN mkdir files
COPY --from=intermediate /janakerman/README.md /files/README.md

আমরা তখন নির্মাণ করতে পারি:

MY_KEY=$(cat ~/.ssh/id_rsa)
docker build --build-arg SSH_KEY="$MY_KEY" --tag clone-example .

প্রমাণ করুন আমাদের এসএসএইচ কীগুলি চলে গেছে:

docker run -ti --rm clone-example cat /root/.ssh/id_rsa

বিল্ড মেশিন থেকে মধ্যবর্তী চিত্রগুলি পরিষ্কার করুন:

docker rmi -f $(docker images -q --filter label=stage=intermediate)

ARG SSH_PRIVATE_KEY এআরজি SSH_KEY
জোসেফ

গিট ক্লোন হয়ে গেলে কি আমরা কীগুলি মুছতে পারি না?
ব্রোঞ্চা

1
আপনি করতে পারেন, তবে আপনি এটি একটি একক অংশ হিসাবে করতে হবে RUNযাতে আপনি আগের চিত্র স্তরটিতে কীটি না রেখে। ডকার হিসাবে 1.13আপনি --squash পরীক্ষামূলক যুক্তিটি ব্যবহার করতে পারেন যা আপনার চূড়ান্ত চিত্র স্তরগুলিতে এসএসএইচ কীটি সরিয়ে ফেলবে।
জ্যাকার

19

বিটবাকেট সংগ্রহস্থলের জন্য অ্যাপো পাসওয়ার্ড তৈরি করুন (বিটবুকিট সেটিংস -> অ্যাক্সেস ম্যানেজমেন্ট -> অ্যাপ্লিকেশন পাসওয়ার্ড, চিত্রটি দেখুন) রেপো এবং প্রকল্পের পড়ার অ্যাক্সেস সহ।

বিটবাকেট ব্যবহারকারী মেনু

তারপরে আপনার যে কমান্ডটি ব্যবহার করা উচিত তা হ'ল:

git clone https://username:generated_password@bitbucket.org/reponame/projectname.git

1
সহজতম :) আমি অবশ্যই স্বীকার করব যে আমি একটি এসএসএইচ ভিত্তিক পদ্ধতির পছন্দ করব, তবে আমি উপরের কোনও কাজ করতে পারি না ... ফাইলগুলি পাওয়া যায় না, ইত্যাদি
জানোস

আমি "অ্যাক্সেস ম্যানেজমেন্ট" দেখছি না ... আমার ধারণা এটি পুরানো?
মার্টিন থোমা

1
কাজ করছে! সরল এবং সরল ... দুর্দান্ত!
জোসমি

2
অবশ্যই ... আপনাকে কেবল বাম বারে আপনার প্রোফাইল ছবিতে ক্লিক করতে হবে , তারপরে বিটবুকিট সেটিংসে এবং আপনি এর মতো কিছু দেখতে পাবেন: imgur.com/EI33zj3
জোসেমি

1
এটি আমার পক্ষে কাজ করেছে। তবে আমার সাবমডিউল রয়েছে এবং --recursiveকাজ হয়নি। আমাকে git cloneপ্রতিটি সাবমোডুলের জন্য রাখতে হয়েছিল , যা ভাল তবে এটি পুনরাবৃত্তভাবে কাজ করতে পারলে দুর্দান্ত হত।
জাইলিন তামাयो

14

আপনি প্রায়শই git cloneডকার বিল্ডের মধ্যে থেকে কোনও ব্যক্তিগত রেপো সম্পাদন করতে চান না । সেখানে ক্লোনটি করাতে ইমেজের অভ্যন্তরে প্রাইভেট এসএস শংসাপত্রাদি রাখার সাথে জড়িত যেখানে সেগুলি পরে আপনার ছবিতে অ্যাক্সেস সহ যে কেউ পেতে পারে।

পরিবর্তে, সাধারণ অভ্যাসটি হ'ল আপনার পছন্দসই সিআই সরঞ্জামে ডকারের বাইরে থেকে গিট রেপো ক্লোন করা এবং কেবলমাত্র COPYফাইলগুলিকে চিত্রটিতে। এটির দ্বিতীয় সুবিধা রয়েছে: ডকার ক্যাচিং। ডকার ক্যাশিং কমান্ডটি চালিত হচ্ছে, পরিবেশের ভেরিয়েবলগুলি এতে অন্তর্ভুক্ত রয়েছে, ইনপুট ফাইলগুলি ইত্যাদির দিকে নজর দেয় এবং যদি একই প্যারেন্ট স্টেপ থেকে পূর্ববর্তী নির্মাণের সাথে একই হয় তবে এটি আগের ক্যাশেটিকে পুনরায় ব্যবহার করে। একটি git cloneকমান্ড সহ, কমান্ডটি নিজেই অভিন্ন, সুতরাং বহিরাগত গিট রেপো পরিবর্তন করা হলেও ডকার ক্যাশে পুনরায় ব্যবহার করবে। যাইহোক, একটি COPYকমান্ড বিল্ড প্রসঙ্গে থাকা ফাইলগুলিকে দেখবে এবং সেগুলি অভিন্ন বা আপডেট হয়েছে কিনা তা দেখতে সক্ষম হবে এবং উপযুক্ত হলে কেবল ক্যাশে ব্যবহার করবে।


আপনি যদি আপনার বিল্ডে শংসাপত্র যুক্ত করতে চলেছেন তবে একাধিক-স্তরের বিল্ড দিয়ে এটি করার বিষয়ে বিবেচনা করুন এবং কেবলমাত্র সেই শংসাপত্রগুলি প্রাথমিক পর্যায়ে রাখুন যা কখনই আপনার বিল্ড হোস্টের বাইরে ট্যাগ করা বা ধাক্কা দেওয়া হয় না। ফলাফলটি দেখে মনে হচ্ছে:

FROM ubuntu as clone

# Update aptitude with new repo
RUN apt-get update \
 && apt-get install -y git
# Make ssh dir
# Create known_hosts
# Add bitbuckets key
RUN mkdir /root/.ssh/ \
 && touch /root/.ssh/known_hosts \
 && ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts

# Copy over private key, and set permissions
# Warning! Anyone who gets their hands on this image will be able
# to retrieve this private key file from the corresponding image layer
COPY id_rsa /root/.ssh/id_rsa

# Clone the conf files into the docker container
RUN git clone git@bitbucket.org:User/repo.git

FROM ubuntu as release
LABEL maintainer="Luke Crooks <luke@pumalo.org>"

COPY --from=clone /repo /repo
...

অতি সম্প্রতি, বিল্ডকিট কিছু পরীক্ষামূলক বৈশিষ্ট্যগুলি পরীক্ষা করছে যা আপনাকে কোনও মাউন্ট হিসাবে কোনও এসএস কী পাস করতে দেয় যা ছবিতে কখনও লেখা হয় না:

# syntax=docker/dockerfile:experimental
FROM ubuntu as clone
LABEL maintainer="Luke Crooks <luke@pumalo.org>"

# Update aptitude with new repo
RUN apt-get update \
 && apt-get install -y git

# Make ssh dir
# Create known_hosts
# Add bitbuckets key
RUN mkdir /root/.ssh/ \
 && touch /root/.ssh/known_hosts \
 && ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts

# Clone the conf files into the docker container
RUN --mount=type=secret,id=ssh_id,target=/root/.ssh/id_rsa \
    git clone git@bitbucket.org:User/repo.git

এবং আপনি এটি দিয়ে এটি তৈরি করতে পারেন:

$ DOCKER_BUILDKIT=1 docker build -t your_image_name \
  --secret id=ssh_id,src=$(pwd)/id_rsa .

মনে রাখবেন যে পাসওয়ার্ড সুরক্ষিত না হওয়ার জন্য এটির জন্য আপনার ssh কী প্রয়োজন, তবে আপনি কমপক্ষে একটি সিপিই কমান্ড অপসারণ করে, এবং কোনও চিত্রের অংশ হতে এসএসএস শংসাপত্রকে এড়িয়ে চলতে একটি স্টেজে বিল্ডটি চালাতে পারেন run


বিল্ডকিট কেবলমাত্র এসএসএস-এর জন্য একটি বৈশিষ্ট্য যুক্ত করেছে যা আপনাকে এখনও আপনার পাসওয়ার্ড সুরক্ষিত এসএসএস কী রাখতে সহায়তা করে, ফলাফলটি দেখে মনে হচ্ছে:

# syntax=docker/dockerfile:experimental
FROM ubuntu as clone
LABEL maintainer="Luke Crooks <luke@pumalo.org>"

# Update aptitude with new repo
RUN apt-get update \
 && apt-get install -y git

# Make ssh dir
# Create known_hosts
# Add bitbuckets key
RUN mkdir /root/.ssh/ \
 && touch /root/.ssh/known_hosts \
 && ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts

# Clone the conf files into the docker container
RUN --mount=type=ssh \
    git clone git@bitbucket.org:User/repo.git

এবং আপনি এটি দিয়ে এটি তৈরি করতে পারেন:

$ eval $(ssh-agent)
$ ssh-add ~/.ssh/id_rsa
(Input your passphrase here)
$ DOCKER_BUILDKIT=1 docker build -t your_image_name \
  --ssh default=$SSH_AUTH_SOCK .

আবার এটি কোনও ইমেজ লেয়ারে লিখিত না হয়ে বিল্ডে ইনজেকশন দেওয়া হয়, শংসাপত্রটি দুর্ঘটনাক্রমে ফাঁস হয়ে যাওয়ার ঝুঁকিটি সরিয়ে দেয়।


এর git cloneআগে লাইনগুলি ক্যাশে হয়ে যাওয়ার পরেও ডকারকে চালনাতে বাধ্য করার জন্য , আপনি একটি বিল্ড এআরজি ইনজেকশন করতে পারেন যা প্রতিটি বিল্ডের সাথে ক্যাশে ভাঙ্গার জন্য পরিবর্তিত হয়। দেখতে দেখতে:

# inject a datestamp arg which is treated as an environment variable and
# will break the cache for the next RUN command
ARG DATE_STAMP
# Clone the conf files into the docker container
RUN git clone git@bitbucket.org:User/repo.git

তারপরে আপনি ডেকার বিল্ড কমান্ডটিতে এই পরিবর্তনটি যুক্ত করতে পারেন:

date_stamp=$(date +%Y%m%d-%H%M%S)
docker build --build-arg DATE_STAMP=$date_stamp .

আপনি ডকারের বাইরে থেকে গিট ব্যবহার করার পরামর্শ দিচ্ছেন, তবে আপনি কীভাবে এসএসএস কীগুলি ব্যবহার করবেন তা ব্যাখ্যা করেন। আপনি কখন এটি প্রয়োজনীয় / উপযুক্ত বিবেচনা করবেন?
JCarlosR

2
@ জে কার্লোসআর যখন বিল্ডটি চালাবেন এমন কোনও বাহ্যিক সিস্টেম আপনার কাছে নেই (যেমন সিআই / সিডি সিস্টেম আগাম ক্লোনটি চালাতে সক্ষম)। ব্যতিক্রম হতে পারে, তবে ডকফাইফাইলের ভিতরে একটি ক্লোন হ'ল কোড গন্ধ।
বিএমচ

1

উপরের সমাধানগুলি বিটবাকেটের জন্য কাজ করে না। আমি বুঝতে পারি এটি কৌশলটি করে:

RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts \
    && eval `ssh-agent` \
    && ssh-add ~/.ssh/[key] \
    && git clone git@bitbucket.org:[team]/[repo].git
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.