ডকার: ইউনিক্সে ডকার ডিমন সকেটের সাথে সংযোগের চেষ্টা করার সময় অনুমতি প্রত্যাখ্যান হয়েছে: ///var/run/docker.sock


175

আমি ডকারে নতুন আমি জেনকিন্সের সাথে আমার লোকাল মেশিনে (উবুন্টু 16.04) ব্যবহার করার চেষ্টা করেছি।

আমি নীচের পাইপলাইন স্ক্রিপ্ট দিয়ে একটি নতুন কাজ কনফিগার করেছি।

node {
    stage('Build') {
      docker.image('maven:3.3.3').inside {
        sh 'mvn --version'
      }
    }
}

তবে এটি নীচের ত্রুটির সাথে ব্যর্থ হয়।

এখানে চিত্র বর্ণনা লিখুন


1
এটি কি একঘেয়ে জিনকিনস বা মাস্টার-স্লেভ সেটআপ আছে? আপনি কোন ব্যবহারকারীর সাথে ডকার পরিদর্শন কমান্ড কার্যকর করছেন তা পরীক্ষা করুন। দেখুন /var/run/docker.sock গ্রুপে RW অ্যাক্সেস আছে কিনা।
রাম কামথ


2
ডকার-ইনস্টলেশন-পরবর্তী পদক্ষেপগুলি: ডকস.ডকার.ইনস্টল
লিনাক্স

উত্তর:


293

ব্যবহারকারীকে jenkinsএই গোষ্ঠীতে যুক্ত করা দরকার docker:

sudo usermod -a -G docker jenkins

তারপরে জেনকিন্স পুনরায় চালু করুন।

সম্পাদন করা

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

আপনি করতে পারেন:

sudo usermod -a -G docker alice

বা আপনার ব্যবহারকারীর নাম যাই হোক না কেন।

আপনি শেষে এটি পরীক্ষা করে grep docker /etc/groupদেখতে পারেন এবং এর মতো কিছু দেখতে পারেন:

docker:x:998:alice

এক লাইনে

তারপরে আপনার ব্যবহারকারীদের গোষ্ঠী আইডি পরিবর্তন করুন docker:

newgrp docker

88
এবং পুনরায় ব্যবহারকারী
ইলিয়া কোলেস্নিকভ

8
উত্তম উত্তর, তবে আরও সাধারণ হওয়ার জন্য আমরা এটি করতে পারি: sudo usermod -a -G docker $USERএবং লগআউট বা পুনরায় বুট করুন। লিঙ্ক
জুলিয়ান নিয়ামবাল

10
আসলে কাজ করার জন্য আমাকে আমার সার্ভারটি পুনরায় চালু করতে হয়েছিল।
এটাগওয়ার্কার


28
আবার লগইন করার দরকার নেই, কেবল newgrp dockerএকই টার্মিনাল সেশনে পরিবর্তে ব্যবহার করুন।
সি

69

আমার প্রথম সমাধানগুলি ছিল:

usermod -aG docker jenkins
usermod -aG root jenkins
chmod 664 /var/run/docker.sock

তবে তাদের কেউই আমার পক্ষে কাজ করেন না, আমি চেষ্টা করেছি:

chmod 777 /var/run/docker.sock

এটি কাজ করে, তবে আমি জানি না এটি সঠিক কল কিনা।


4
এটি ব্যর্থ হওয়ার কারণ সম্ভবত আপনাকে টার্মিনালটি আবার খুলতে হয়েছিল। এটি 664 করার পরে ব্যর্থ হয়েছিল, কিন্তু তারপরে আমি এটি ব্যবহার করে একটি নতুন শেল খুললাম।
পিএইচগ্যামার

1
আমি পুনরায় খোলার চেষ্টা করেছি, কিন্তু পরে শুধুমাত্র গত chmod 777 কাজ শুরু
বিদ্রূপাত্মক

সমস্যাটি হ'ল পুনরায় বুট করার পরে 7 777টি to60০ এ পুনরায় সেট করা হয়েছিল me আমার জন্য সমস্যাটি কীভাবে স্থির হয়েছিল তা ছিল 'ইউজারমড-এজি ব্যবহারকারীদের জেনকিনস'।
বিদ্রূপ 15

আমি বুঝতে পারি যে এটি পুনরায় সেট হয়ে গেছে, তবে ডকার.সক অনুমতিগুলি 777 এ সেট করবেন না This এটি যে কাউকে আপনার সিস্টেমে রুট দেয়। তারা ডকারের সাথে কথা বলতে এবং কোনও সীমাবদ্ধতা ছাড়াই সুবিধাযুক্ত পাত্রে তৈরি করতে সক্ষম।
ল্যান্স হাডসন

3
এটি লেখক এবং এমনকি আমার পক্ষে কাজ করার পরেও, docker.sockফাইলটিতে আরও অ্যাক্সেস দেওয়া ভাল সমাধান নয়, আপনাকে কেবলমাত্র usermod... নির্দেশাবলী কার্যকর করতে হবে এবং আপনার সিস্টেমটি পুনরায় বুট করুন, অন্যথায় এটি কার্যকর হয় না
মারিয়ানো রুইজ

32

আমার জন্য সাফল্য

sudo usermod -a -G docker $USER
reboot

4
পুনরায় বুট করার দরকার নেই। কেবল লগআউট করুন তারপর আবার লগইন করুন। আমি ব্যবহারকারীর সম্পর্কে কথা বলছি
আব্দেন্নর টুমি

1
উবুন্টু 18.04 এ, সেটিংটি কাজ করার জন্য আমাকে পুনরায় বুট করতে হয়েছিল।
নিখিল

1
উবুন্টু 20.04 এ আমার পুনরায় বুট করা দরকার। সেশন বন্ধ করুন যথেষ্ট নয়।
ফ্রেমন্টব

অথবা লগ আউট করার পরিবর্তে su {{USER run চালান
goonerif করুন

19

2018-08-19

আমি এটির জন্য বেশ কয়েকদিন ধরে আটকে আছি এবং কেন এবং কীভাবে আমি এর সম্পূর্ণ উত্তর খুঁজে পাইনি, আমি অন্য লোকদের জন্য একটি পোস্ট করব যা একই সমস্যাটির উপর হোঁচট খায় এবং উপরের উত্তরগুলি কাজ করে না।

জেনকিন্সকে ডকারের ভিতরে চালানোর সময় এই 3 টি গুরুত্বপূর্ণ পদক্ষেপ:

  1. /var/run/docker.sockহোস্ট থেকে ডকার ব্যবহার করতে সক্ষম হওয়ার জন্য আপনি সকেটটি জিনকিন্স ধারকটিতে মাউন্ট করেছেন ।
  2. এটি ব্যবহারের জন্য আপনাকে ধারকের ভিতরে ডকার ইনস্টল করতে হবে। এটি কীভাবে করা যায় তার একটি দুর্দান্ত এবং সাধারণ নিবন্ধ article নোট করুন যে নতুন সংস্করণগুলিতে ইতিমধ্যে ডকার ইনস্টল থাকতে পারে
  3. আপনি sudo usermod -a -G docker jenkinsডকার গ্রুপে জিনকিন যোগ করার জন্য দৌড়েন। তবে, হোস্ট ডকার এবং কনটেইনার ডকারের একই গ্রুপের আইডি না থাকলে এখানে কোনও অনুমতি সমস্যা হতে পারে তাই কনটেইনার ডকারের গিডটি হোস্ট ডকার গিডের মতো হওয়ার জন্য সামঞ্জস্য করা খুব জরুরি

আপনি একটি লঞ্চ স্ক্রিপ্ট একটি অংশ হিসাবে বা শুধু ব্যবহার করে এটা করতে পারেন execএবং নিজে করছেন: groupmod -g <YOUR_HOST_DOCKER_GID> docker

এছাড়াও, অনুমতি পরিবর্তন না এর /var/run/docker.sock777 বা যে ভালো জিনিস কারণ এটা একটি বড় নিরাপত্তা ঝুঁকি, আপনি মূলত দান করা হয় সবাই আপনার মেশিনে ব্যবহার Docker করার অনুমতি

আশাকরি এটা সাহায্য করবে


1
ধন্যবাদ-- নোট করুন যে জেনকিন্স ডকারের বর্তমান চিত্রগুলির জন্য ডকার কমান্ডগুলি ইতিমধ্যে ইনস্টল করা আছে (এবং অ্যাপট-গেটটি হয় না)) আপনার অন্যান্য বিষয়গুলি - জেনকিন্সকে ডান গ্রুপে যুক্ত করা এবং ডিকার হোস্টের সাথে জিআইডি মিলছে কিনা তা নিশ্চিত করা চিহ্নিত করা.
স্টিভ বন্ডস

1
গ্রুপ আইডি সমস্যাটি দিয়ে আমার জীবন বাঁচিয়েছে। ধন্যবাদ!
লেনকুই

13

আমি জেনকিন্স ব্যবহারকারীকে মূল গোষ্ঠীতে যুক্ত করেছি এবং জেনকিনগুলি পুনরায় চালু করেছি এবং এটি কাজ শুরু করে।

sudo usermod -a -G root jenkins
sudo service jenkins restart

16
এটি একটি খারাপ সুরক্ষা অনুশীলন। পছন্দের পদ্ধতির এই উত্তর
কেভিন্দাব

10

ডকার.সক ফাইলের অ্যাক্সেসের অনুমতি পরিবর্তন করুন

chmod 777 /var/run/docker.sock

অথবা আপনি sudoকমান্ডের শুরুতে ব্যবহার করতে পারেন ।

chmod 777সমস্ত ব্যবহারকারীদের জন্য সমস্ত ক্রিয়া মঞ্জুরি দেবে যখন chmod 666সমস্ত ব্যবহারকারীকে পড়তে এবং লেখার অনুমতি দেয় তবে ফাইলটি কার্যকর করতে পারে না।


এই আমার প্রয়োজন, ধন্যবাদ!
ক্রেজিঙ্ক্স

9

কেবল ব্যবহারকারীর জন্য পরিপূরক গোষ্ঠীdocker হিসাবে যুক্ত করাjenkins

sudo usermod -a -G docker jenkins

জেনকিনস এজেন্ট হিসাবে ডকার চিত্র ব্যবহার করার সময় সর্বদা যথেষ্ট নয় । এটি যদি আপনার সাথে Jenkinsfileশুরু হয় pipeline{agent{dockerfileবা pipeline{agent{image:

pipeline {
    agent {
        dockerfile {
            filename 'Dockerfile.jenkinsAgent'
        }
    }
    stages {

এটি কারণ জেনকিনস একটি docker runকমান্ড সম্পাদন করে , যার ফলস্বরূপ তিনটি সমস্যা দেখা দেয়।

  • এজেন্টের (সম্ভবত) ডকার প্রোগ্রাম ইনস্টল করা হবে না।
  • এজেন্টের ডকার ডেমন সকেটে অ্যাক্সেস থাকবে না এবং তাই ডকার-ইন-ডকার চালানোর চেষ্টা করবে, যা প্রস্তাবিত নয়
  • জেনকিনস সংখ্যার ব্যবহারকারী আইডি এবং সংখ্যার গোষ্ঠী আইডি দেয় যা এজেন্ট ব্যবহার করা উচিত should এজেন্টের কোনও পরিপূরক গোষ্ঠী থাকবে না, কারণ docker runধারকটিতে লগইন করে না (এটি আরও একটির মতো sudo)।

এজেন্টের জন্য ডকার ইনস্টল করা

ডকার ইমেজের মধ্যে ডকার প্রোগ্রামগুলি উপলভ্য করার জন্য আপনার ডকফাইফাইলে ডকার ইনস্টলেশন প্রক্রিয়াগুলি চালানো দরকার :

# Dockerfile.jenkinsAgent
FROM debian:stretch-backports
# Install Docker in the image, which adds a docker group
RUN apt-get -y update && \
 apt-get -y install \
   apt-transport-https \
   ca-certificates \
   curl \
   gnupg \
   lsb-release \
   software-properties-common

RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

RUN apt-get -y update && \
 apt-get -y install \
   docker-ce \
   docker-ce-cli \
   containerd.io

...

ডকার ডেমন সকেট ভাগ করে নেওয়া

হিসাবে হয়েছে আগে বলেন , দ্বিতীয় সমস্যা মানে জেনকিন্স Docker ধারক চলমান তাই এটি ভাগ Docker ডেমন যে সঙ্গে Docker ডেমন সকেট স্থাপন বাহিরে ধারক। সুতরাং আপনাকে জেনকিন্সকে এই ভাগ করে নেওয়ার সাথে ডকারের ধারক চালানোর জন্য বলতে হবে:

pipeline {
    agent {
        dockerfile {
            filename 'Dockerfile.jenkinsAgent'
            args '-v /var/run/docker.sock:/var/run/docker.sock'
        }
    }

ইউআইডি এবং জিআইডি সেট করা হচ্ছে

তৃতীয় সমস্যার আদর্শ সমাধানটি এজেন্টের জন্য পরিপূরক গোষ্ঠী স্থাপন করা হবে। এটা সম্ভব বলে মনে হচ্ছে না। আমি যে ফিক্সটি সম্পর্কে অবগত রয়েছি তা হ'ল জেনকিনস ইউআইডি এবং ডকার জিআইডি (সকেটে গ্রুপ লেখার অনুমতি রয়েছে এবং এর মালিকানাধীন root.docker) দিয়ে এজেন্ট চালানো । তবে সাধারণভাবে, আপনি জানেন না যে এই আইডিগুলি কী (সেগুলি বরাদ্দ করা হয়েছিল যখন হোস্টে জেনকিনস এবং ডকার ইনস্টল করার সময় হয়েছিল useradd ... jenkinsএবং groupadd ... dockerচালিত হয়েছিল)। এবং আপনি জেনকিন্সকে কেবল ব্যবহারকারী ব্যবহারকারী jenkinsএবং গোষ্ঠীকে বলতে পারবেন নাdocker

args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'

কারণ এটি ডকারকে নাম jenkinsএবং docker চিত্রের মধ্যে থাকা ব্যবহারকারী এবং গোষ্ঠীটি ব্যবহার করতে বলেছে এবং আপনার ডকার চিত্রটিতে সম্ভবত jenkinsব্যবহারকারী এবং গোষ্ঠী নেই এবং এমনকি যদি এটির কোনও গ্যারান্টি নাও থাকে তবে এটির মতো ইউআইডি এবং জিআইডি থাকবে হোস্ট, এবং একইভাবে কোনও গ্যারান্টি নেই যে dockerজিআইডি একই

ভাগ্যক্রমে, জেনকিন্স docker buildআপনার ডকফাইফিলের জন্য একটি স্ক্রিপ্টে কমান্ড চালায় , তাই ডকার বিল্ড আর্গুমেন্ট হিসাবে আপনি সেই তথ্যটি পাস করার জন্য কিছু শেল-স্ক্রিপ্ট যাদু করতে পারেন:

pipeline {
    agent {
        dockerfile {
            filename 'Dockerfile.jenkinsAgent'
            additionalBuildArgs  '--build-arg JENKINSUID=`id -u jenkins` --build-arg JENKINSGID=`id -g jenkins` --build-arg DOCKERGID=`stat -c %g /var/run/docker.sock`'
            args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'
        }
    }

যে ব্যবহার idপেতে কমান্ড ইউআইডি এবং GID এর jenkinsব্যবহারকারী এবং statকমান্ড Docker সকেট সম্পর্কে তথ্য পাবেন।

আপনার ডকফাইফাইল এজেন্টের জন্য কোনও jenkinsব্যবহারকারী এবং dockerগোষ্ঠী সেটআপ করতে groupadd, groupmodএবং ব্যবহার করে useradd:

# Dockerfile.jenkinsAgent
FROM debian:stretch-backports
ARG JENKINSUID
ARG JENKINSGID
ARG DOCKERGID
...
# Install Docker in the image, which adds a docker group
RUN apt-get -y update && \
 apt-get -y install \
   apt-transport-https \
   ca-certificates \
   curl \
   gnupg \
   lsb-release \
   software-properties-common

RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

RUN apt-get -y update && \
 apt-get -y install \
   docker-ce \
   docker-ce-cli \
   containerd.io

...
# Setup users and groups
RUN groupadd -g ${JENKINSGID} jenkins
RUN groupmod -g ${DOCKERGID} docker
RUN useradd -c "Jenkins user" -g ${JENKINSGID} -G ${DOCKERGID} -M -N -u ${JENKINSUID} jenkins

এটি একটি দুর্দান্ত বিস্তৃত সমাধান এবং ডকফেরাইলের মাধ্যমে ডকারে ভাগ করে নেওয়া ডকার সকেট ব্যবহার করার সময় আমার পক্ষে একমাত্র কাজ করেছিল। এটির নিজস্ব ব্লগ পোস্ট হওয়া উচিত। এর জন্য ধন্যবাদ!
গ্রেগ ওলমস্টেড

আপনি কি পাস করতে পারে মনে হচ্ছে -u jenkins:$(getent group docker | cut -d: -f3)?
গিলেস্পি

: যখন args ক্ষণস্থায়ী, নিম্নোক্ত লাইন পরিবর্তন করতে সম্ভবত ভালো args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'দ্বারা args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:jenkins --group-add docker' যখন -u Jenkins ক্ষণস্থায়ী: Docker, আপনি প্রাথমিক ব্যবহারকারী গ্রুপ, যেটার অর্থ পরিবর্তন যখন ব্যবহারকারী লিখুন একটি ফাইল, কর্মক্ষেত্র মধ্যে বলি, ফাইল সেট হবে জেনকিনে ব্যবহারকারী এবং গ্রুপটি ডকারে। যা সম্ভবত আমাদের উদ্দেশ্য নয় is
নিকোলাস ফোর্নি

8

আমার জেনকিনস ডকারে চলছে এবং সংযুক্ত জেনকিন্স হোস্ট মেশিন উবুন্টু 16.04 থেকে /var/run/docker.sock এর মাধ্যমে ডকার সকেট ব্যবহার করছে।

আমার জন্য সমাধানটি ছিল:

1) জেনকিনসের ডকার পাত্রের ভিতরে ( docker exec -it jenkins bashহোস্ট মেশিনে)

usermod -a -G docker jenkins
chmod 664 /var/run/docker.sock
service jenkins restart (or systemctl restart jenkins.service)
su jenkins

2) হোস্ট মেশিনে:

sudo service docker restart

664 অর্থ - গ্রুপ থেকে মালিক এবং ব্যবহারকারীদের জন্য পড়ুন এবং লিখুন (কিন্তু সম্পাদন করবেন না)।


এটি কেবলমাত্র সমাধান যা লগইন / লগইন প্রয়োজন হয় না, অর্থাত্ সমাধানটি যা শেল স্ক্রিপ্টে এটি চালানোর চেষ্টা করার সময় কাজ করে।
পিভি

3

প্রোডাকশন কনফিগার করার সময় আমি অনুমতি ইস্যুটি পেয়েছি I সমস্যাটি সমাধান করার জন্য আমি নীচের সমাধানের চেষ্টা করেছি।

ভুল বার্তা

ubuntu@node1:~$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

সমাধান: ত্রুটি বার্তায় নির্দেশিত সকেটের অনুমতি, /var/run/docker.sock:

ubuntu@ip-172-31-21-106:/var/run$ ls -lrth docker.sock
srw-rw---- 1 root root 0 Oct 17 11:08 docker.sock
ubuntu@ip-172-31-21-106:/var/run$ sudo chmod 666 /var/run/docker.sock
ubuntu@ip-172-31-21-106:/var/run$ ls -lrth docker.sock
srw-rw-rw- 1 root root 0 Oct 17 11:08 docker.sock

ডকেট.সোকের জন্য অনুমতি পরিবর্তন করার পরে অনুমতিগুলি পরীক্ষা করার জন্য নীচের কমান্ডটি কার্যকর করুন।

ubuntu@ip-172-31-21-106:/var/run$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

2

আমার ক্ষেত্রে, এটি কেবলমাত্র jenkinsব্যবহারকারীকে দলে যোগ করার প্রয়োজন ছিল না docker, তবে সেই গোষ্ঠীকে jenkinsব্যবহারকারীর প্রাথমিক গোষ্ঠী তৈরি করুন ।

# usermod -g docker jenkins
# usermod -a -G jenkins jenkins

জেনকিন্স স্লেভ নোডটি পুনরায় সংযোগ করতে বা জেনকিন্স সার্ভারটি পুনরায় চালু করতে ভুলবেন না, আপনার ক্ষেত্রে নির্ভর করুন।


2

2019-02-16

অন্যান্য পদক্ষেপগুলি বেশিরভাগ পদক্ষেপ আমার জন্য একই ছিল। তবে, আমি উল্লিখিত সমাধানগুলি সহ ইউজারমড ব্যবহার করে গ্রুপ ডকারে জিনকিন যোগ করতে পারিনি।

আমি ডকার হোস্ট এবং চলমান ডকার পাত্রে থেকে নিম্নলিখিত কমান্ডটি চেষ্টা করেছি :

sudo usermod -a -G docker jenkins

(আমি ডকার হোস্টের নিম্নলিখিত কমান্ড সহ চলমান ডকার পাত্রে প্রবেশ করেছি :

docker exec -t -i my_container_id_or_name /bin/bash

)

ডকার হোস্টের কাছ থেকে প্রাপ্ত :

ইউজারমড: ব্যবহারকারী 'জেনকিনস' বিদ্যমান নেই

ডকার পাত্রে থেকে প্রাপ্ত :

আমরা বিশ্বাস করি আপনি স্থানীয় সিস্টেম প্রশাসকের কাছ থেকে সাধারণ বক্তৃতা পেয়েছেন। এটি সাধারণত এই তিনটি জিনিসে সিদ্ধ হয়:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[সুডো] জেনকিনের জন্য পাসওয়ার্ড:

আমি পাসওয়ার্ড জানতাম না

sudoকমান্ডের অংশ ব্যতীত ডকার পাত্রে আমি পেয়েছি:

ব্যবহারকারীমোড: অনুমতি অস্বীকৃত। ইউজারমড: লক করতে পারবেন না / ইত্যাদি / পাসডাব্লুড; পরে আবার চেষ্টা করুন।

সমাধান: আমি নিম্নলিখিত কমান্ড সহ ডকার হোস্ট থেকে চলমান ডকার ধারকটিতে প্রবেশ করলাম :

docker exec -t -i -u root my_container_id_or_name /bin/bash

এখন, আমি মূল হিসাবে প্রবেশ করলাম , এবং নিম্নলিখিত আদেশটি জারি করেছি:

usermod -a -G docker jenkins

তারপরে, ডকার হোস্ট থেকে , আমি নিম্নলিখিত কমান্ডটি দিয়ে আমার চলমান ডকার ধারকটি পুনরায় চালু করেছি :

docker restart my_container_id_or_name

এর পরে, আমি জেনকিন্স কাজ শুরু করেছি এবং এটি সাফল্যের সাথে শেষ হয়েছে।

আমি কেবল ব্যবহারকারীর জন্য কমান্ড ইস্যু করতে রুট ব্যবহারকারীকে ব্যবহার করেছি ।usermodjenkins


2

2019-05-26

এটি আমার পক্ষে কাজ করেছিল!

উদাহরণস্বরূপ ডকার-রচনা:

version: "3"
services:
  jenkins:
    image: jenkinsci/blueocean
    privileged: true
    ports:
      - "8080:8080"
    volumes:
      - $HOME/learning/jenkins/jenkins_home:/var/jenkins_home
    environment:
      - DOCKER_HOST=tcp://socat:2375
    links:
      - socat

  socat:
     image: bpack/socat
     command: TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock
     volumes:
        - /var/run/docker.sock:/var/run/docker.sock
     expose:
        - "2375"

2

আমি একটি অনুরূপ সমস্যার মুখোমুখি হয়েছি, এটি একটি অনুমতির সমস্যা এবং এই সমস্যার কারণ হ'ল ডকার ডেমন / সার্ভার সর্বদা rootব্যবহারকারী হিসাবে চালিত হয় এবং আপনি সর্বদা ডকার কমান্ডের সাথে প্রিফেস করতে চান sudo

ডকার ডিমন একটি টিসিপি পোর্টের পরিবর্তে ইউনিক্স সকেটের সাথে আবদ্ধ। ডিফল্টরূপে ইউনিক্স সকেটটি ব্যবহারকারীর মালিকানাধীন rootএবং অন্যান্য ব্যবহারকারীরা কেবল এটির ব্যবহার করে অ্যাক্সেস করতে পারবেন sudo

এটি ঠিক করার জন্য, এখানে আমার জন্য কী কাজ করেছে:

প্রথমত, আপনার কোনও ডকার গ্রুপ ইতিমধ্যে তৈরি হয়েছে কিনা তা পরীক্ষা করুন:

cat /etc/group

যদি আপনি dockerপ্রদর্শিত তালিকায় খুঁজে না পান তবে আপনাকে একটি তৈরি করতে হবে:

sudo groupadd docker

এরপরে, নীচের কমান্ডটি ব্যবহার করে আপনার userএবং আপনার নিশ্চিত করুন group:

cat /etc/group

ডকারের জন্য গ্রুপটি দেখতে স্ক্রোল করুন। এটি এই ফর্ম্যাট হওয়া উচিত

docker:x:140:promisepreston

যেখানে dockerআমার groupএবং promiseprestonআমারuser

এখন আমরা আপনার ব্যবহারকারীকে ডকার গ্রুপে যুক্ত করতে পারি

কেবল ডকার কনটেইনার ফাইলগুলির জন্য:

আপনার টার্মিনালে নীচের কমান্ডটি অনুলিপি করুন এবং চালনা করুন ঠিক কীভাবে এটি যেভাবে বলা যায় এটির কোনও পরিবর্তন না করেই আপনি কীভাবে চালনা করতে চান বা চালনা করার চেষ্টা করছেন বা অনুমতি ইস্যুটি করছেন:

sudo usermod -aG docker $USER

উপরের কমান্ডটি চালানোর পরে, আপনাকে লগ আউট করতে এবং লগ ইন করতে হবে যাতে আপনার গ্রুপের সদস্যপদটি পুনরায় মূল্যায়ন হয় is তবে, লিনাক্সে, আপনি গ্রুপগুলিতে পরিবর্তনগুলি সক্রিয় করতে নীচের নীচের কমান্ডটিও চালিয়ে যেতে পারেন ( আপনার টার্মিনালে নীচের কমান্ডটি অনুলিপি করুন এবং চালনা করুন ঠিক কীভাবে এটি কোনও পরিবর্তন না করে বলা হয়েছে, ডকার চিত্র / ধারক / কমান্ড নির্বিশেষে যে আপনি দৌড়াতে চান বা চালানোর চেষ্টা করছেন বা অনুমতি ইস্যুটি কেস করছেন ):

newgrp docker 

আপনি এখন যাচাই করতে পারবেন যে আপনি sudo অনুমতি ছাড়াই ডকার কমান্ডগুলি চালাতে পারবেন, অনুমতিগুলি পুনরায় তৈরি করার জন্য যে কমান্ডটি চালিয়ে যাচ্ছে, তা বলুন ( আপনার চিত্র / ধারক / কমান্ডের নামটি প্রতিস্থাপন করুনmy-command ):

docker run my-command

ডকার এবং স্থানীয় ফাইল সিস্টেম ফাইলগুলির জন্য:

আপনার যদি স্থানীয় ফাইল সিস্টেমে ফাইলগুলির একটি অনুলিপি থাকে, তবে আপনি এই ফর্ম্যাটটি ব্যবহার করে অ্যাপ্লিকেশন ডিরেক্টরিগুলি সংরক্ষণ করা সেই অ্যাপ্লিকেশন ডিরেক্টরিটির মালিকানা পরিবর্তন করতে পারেন:

sudo​​ ​ chown​​ ​ <your_user>:<your_group>​​ ​ -R​​ my-app-directory/

সুতরাং আমার ক্ষেত্রে এটি হবে:

sudo chown promisepreston:docker -R my-app-directory/

দ্রষ্টব্য: অনুগ্রহ করে অ্যাপ্লিকেশন ডিরেক্টরিতে থাকা প্যারেন্ট ডিরেক্টরিতে এই কমান্ডটি চালান।

এখানেই শেষ.

আশা করি এটা কাজে লাগবে



1

আমি জোকিন্স একটি ডকারের ধারকের ভিতরে চালাচ্ছি। আমার পক্ষে সহজ সমাধানটি ছিল একটি কাস্টম চিত্র যা গতিশীলভাবে জিআইডি সেট করে, যেমন:

FROM jenkins/jenkins:lts
...
CMD DOCKER_GID=$(stat -c '%g' /var/run/docker.sock) && \
    groupadd -for -g ${DOCKER_GID} docker && \
    usermod -aG docker jenkins && \
    sudo -E -H -u jenkins bash -c /usr/local/bin/jenkins.sh

দেখুন: https://github.com/jenkinsci/docker/issues/263

বিকল্পভাবে আপনি নিম্নলিখিত বিকল্পগুলির সাথে জিনকিনগুলি চালু করতে পারেন:

-v /var/run/docker.sock:/var/run/docker.sock \
-u jenkins:$(getent group docker | cut -d: -f3)

এটি ধরে নিয়েছে আপনার জেনকিনস চিত্রটিতে ডকার ক্লায়েন্ট ইনস্টল রয়েছে। দেখুন: https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci


1

যদি আপনি নীচের মতো ত্রুটি পেতে পারেন,

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

অথবা

level=error msg="failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: dial unix /var/run/docker.sock: connect: permission denied"

নিম্নলিখিত কমান্ডগুলি কার্যকর করার চেষ্টা করুন,

$ sudo su - jenkins
$ sudo usermod -a -G docker $USER
$ sudo chown jenkins:docker /var/run/docker.sock

do sudo usermod -a -G ডকার $ ব্যবহারকারী 'জেনকিনসের পাসওয়ার্ড জিজ্ঞাসা করবে, ব্যবহারকারীর পাসওয়ার্ড কী তা নিশ্চিত নয়।
3lokh

আমি মনে করি আপনার জেনকিন্স ব্যবহারকারীর জন্য সুডো অনুমতি দেওয়া উচিত। অথবা আপনি নীচের কমান্ডটি রুট ব্যবহারকারীর মাধ্যমে চেষ্টা করতে পারেন, usermod -a -G docker jenkinsএবংchown jenkins:docker /var/run/docker.sock
লক্ষ্মীকান্দন

আপনার সকেটের মালিকানা জেনকিন্সে পরিবর্তন করা উচিত নয়। এবং আপনার সুডো চালানো উচিত যা সাধারণ ব্যবহারকারীর সুডোর অ্যাক্সেস থাকে, জেনকিন্স হিসাবে নয় as এই উত্তর গৃহীত উত্তরের সাথে কী যুক্ত করে?
জিম স্টুয়ার্ট

1

আমি আনুষ্ঠানিক জেনকিনস ডকার ইমেজ ( https://hub.docker.com/r/jenkins/jenkins ) ব্যবহার করছি তবে আমি মনে করি যে সমাধানটি সর্বাধিক ব্যবহারের ক্ষেত্রে প্রযোজ্য যেখানে আমরা ডকারের ধারকের ভিতরে ডকার চালাতে চাই।

ডকার কনটেইনার ভিতরে ডকার ব্যবহারের জন্য প্রস্তাবিত উপায় হ'ল সিস্টেমের ডকার ডিমন ব্যবহার করা। এটি সম্পর্কে ভাল নিবন্ধ: https://itnext.io/docker-in-docker-521958d34efd

অনুমতি ইস্যুটি হ্যান্ডেল করার গোপনীয়তা, যা এই প্রশ্নটি সম্পর্কে, এটি ধারকটির ভিতরে থাকা ধারক ব্যবহারকারীর জন্য অনুমতি যোগ করা , হোস্ট সিস্টেম নয় । কেবলমাত্র রুট ব্যবহারকারীর ডিফল্টরূপে এটি করার অনুমতি রয়েছে

docker exec -it -u root <container-name> bash
usermod -a -G docker <username>

এটা করবো. ধারকটি পুনরায় চালু করতে ভুলবেন না।

আমি অনুমান করার সহজ উপায়টি কাস্টমাইজড ডকফলিল তৈরি করা:

# Official jenkins image
FROM jenkins/jenkins:lts
# Swith to root to be able to install Docker and modify permissions
USER root
RUN apt-get update
# Install docker
RUN curl -sSL https://get.docker.com/ | sh
# Add jenkins user to docker group
RUN usermod -a -G docker jenkins
# Switch back to default user
USER jenkins

# Bild the image:
# sudo docker build -t yourusername/imagename .
# Run the image and mount with the followin bind mount option:
# sudo docker run --name imagename -d -p8080:8080 -v /var/run/docker.sock:/var/run/docker.sock yourusername/imagename

জেনকিন্স ছবিতে পুরো ডকার ইনস্টল করার দরকার নেই, আমার উত্তরটি দেখুন
deFreitas

1

যদি কেউ এখনও তাদের স্থানীয় মেশিনে (উবুন্টু) সমস্যার মুখোমুখি হন তবে কমান্ডের নীচে চেষ্টা করুন:

sudo chmod 666 /var/run/docker.sock

1

আমার ক্ষেত্রে এটি সফলভাবে কাজ করবে। আপনার স্থানীয় রেপো নেভিগেট করুন এবং এই আদেশটি প্রবেশ করুন।

sudo chmod 666 /var/run/docker.sock

0

জেনকিন্স যে সার্ভারে চলছে, সেখানে আমি ব্যবহার করেছি

sudo setfacl -m user:tomcat:rw /var/run/docker.sock

এবং তারপরে প্রতিটি ডকার ধারক দিয়ে চালাও

-v /var/run/docker.sock:/var/run/docker.sock

সেটফ্যাকেল ব্যবহার করা আরও ভাল বিকল্প বলে মনে হচ্ছে এবং কোনও "-u ব্যবহারকারী" প্রয়োজন নেই। ধারকগুলি তখন জেনকিনস চালিত একই ব্যবহারকারী হিসাবে চালিত হয়। তবে আমি সুরক্ষা বিশেষজ্ঞদের যে কোনও প্রতিক্রিয়া প্রশংসা করব।


0

ডকফাইফাইল নীচে ব্যবহার করুন

FROM jenkins/jenkins

USER root

# Install Docker
RUN apt-get update && \
    apt-get -y install apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common && \
    curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
    add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
    $(lsb_release -cs) \
    stable" && \
    apt-get update && \
    apt-get -y install docker-ce


# Compose
RUN curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose



RUN usermod -aG docker jenkins
RUN usermod -aG root jenkins

USER jenkins

0

আমার ক্ষেত্রে এটি সবেমাত্র ডকার পরিষেবা শুরু করছিল:

sudo service docker start

0

নতুন ব্যবহারকারী গ্রুপ এবং ব্যবহারকারীর উপর প্রভাব ফেলতে প্রায়শই একটি রিবুট প্রয়োজন need


0

যদি আপনি জিনকিনসকে কোনও ডকারের ধারকের ভিতরে চালাচ্ছেন এবং আপনার জেনকিন্স হোস্ট ডকারের সাথে সংযোগ স্থাপন করছে তবে আপনি ঠিক এটি নীচের ডকফেরাইল দ্বারা ঠিক করতে পারেন:

FROM jenkins/jenkins:2.179
USER root
RUN groupadd docker && usermod -a -G docker jenkins
USER jenkins 

-6

হতে পারে আপনার প্রথম থেকেই "-u রুট" বিকল্পের সাহায্যে ডকার চালানো উচিত

অন্তত আমার সমস্যার সমাধান


1
তারপরে আপনি ব্যবহারকারী হিসাবে ফাইল তৈরি হতে পারে root। 18.06.1 এর সাথে ডকারের সাথে কমপক্ষে এটি আমার ক্ষেত্রে হয়েছিল।
আর্নস্ট দে হান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.