"ডকার বিল্ড" চলাকালীন ডকার ইমেজে ফাইল / ইত্যাদি / হোস্ট ফাইল কীভাবে আপডেট করবেন


106

আমি /etc/hosts"ডকার বিল্ড" চলাকালীন আমার ফাইলটি আপডেট করতে চাই ।

আমি ডকফাইলে লাইনের নীচে যুক্ত করেছি তবে এটি আপডেটও হয় না /etc/hosts ফাইল না ত্রুটি দিচ্ছে না।

RUN echo "192.168.33.11    mynginx" >> /etc/hosts

আমার আপডেট করা দরকার /etc/hosts । কেউ কি এই বিষয়ে পরামর্শ দিতে পারেন?


আপনি কি আপনার ডকার বিল্ড সম্পাদন করতে বুট 2 ডকার ব্যবহার করছেন?
ভনসি

না, আমি ডকার ১.৮ এর লিনাক্স সংস্করণটি ব্যবহার করছি।
প্রকাশ

1
এবং আপনি যখন নিজের চিত্রটি একটি ধারক হিসাবে চালাচ্ছেন, এর / ইত্যাদি / হোস্টগুলি অপরিবর্তিত রয়েছে? অথবা আপনি আপনার লিনাক্স হোস্ট / ইত্যাদি / হোস্ট উল্লেখ করছেন?
ভনসি

4
ডকারের সময় ইমেজটি সফলভাবে নির্মিত হয় b তবে যখন আমি একই চিত্র ব্যবহার করে একটি ধারক চালাই এবং আমি / ইত্যাদি / হোস্ট ফাইলটি পরীক্ষা করে দেখি, পরিবর্তনগুলি সেখানে ছিল না।
প্রকাশ

উত্তর:


141

ডকারের আরও সাম্প্রতিক সংস্করণ সহ, এটি ডকার-রচনা এবং এর নির্দেশাবলীর সাহায্যে করা যেতে পারেextra_hosts

হোস্টনাম ম্যাপিংস যুক্ত করুন। ক্লায়েন্ট প্যারামিটারের
মতো একই মানগুলি ব্যবহার করুন (যা ইতিমধ্যে ডকার 1.8 এর জন্য পাওয়া উচিত)।docker run--add-host

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

সংক্ষেপে: /etc/hostsআপনার ধারকটি চালনার সময় এটি পরিবর্তন করুন , এটি তৈরি না করে।


ডকার 17.x + এর সাথে আপনার নীচে একটি docker build --add-hostউল্লেখ রয়েছে তবে 34078 ইস্যুতে এবং এই উত্তরে মন্তব্য করা হয়েছে :

--add-hostবিল্ড সময় বৈশিষ্ট্য বিল্ড করার সময় একটি হোস্ট অগ্রাহ্য করার অনুমতি ডিজাইন করা হয়েছে, কিন্তু ছবিতে যে কনফিগারেশন জিদ না।

উল্লিখিত সমাধানগুলি আমি উপরে প্রস্তাবিত ডকার-রচনাটি উল্লেখ করে:

  • একটি অভ্যন্তরীণ ডিএনএস চালান; আপনি ডিমনটিতে ডিফল্ট ডিএনএস সার্ভারটি ব্যবহার করতে পারেন; এই ভাবে শুরু হওয়া প্রতিটি ধারক স্বয়ংক্রিয়ভাবে কনফিগার করা ডিএনএস ডিফল্টরূপে ব্যবহার করবে
  • ডকার রচনা ব্যবহার করুন এবং docker-compose.ymlআপনার বিকাশকারীদের একটি সরবরাহ করুন।
    ডকার কম্পোজ ফাইলটি আপনাকে কন্টেনার শুরু করার সময় যে সমস্ত অপশন ব্যবহার করা উচিত তা নির্দিষ্ট করতে দেয়, সুতরাং বিকাশকারীরা সেট করতে হবে এমন সমস্ত বিকল্পের সাহায্যে ধারকটি শুরু করতে কেবল রচনা করতে পারেন could

2
আমি ডকার ইমেজে / ইত্যাদি / হোস্টগুলি পরিবর্তন করতে চাই।
প্রকাশ

1
@ প্রকাশসিংহ আমি সম্মত, কিন্তু এটি করা সহজ বলে মনে হচ্ছে না।
ভনসি

1
@ প্রকাশসিংহ আপনি মেশিনে একটি বাশ উদাহরণ খুলতে পারবেন docket exec -it <container name> /bin/bash, তারপরে আপনার পছন্দসই কমান্ড লাইন সম্পাদক (ভিএম, ইম্যাকস, ন্যানো, ইকো '' </>) এর সাহায্যে ডেকারের কনটেইনার হোস্টটিকে / ect / হোস্টের অধীনে আপডেট করতে পারেন।
নাটাগিক

@ প্রকাশসিংহ হ্যাঁ আমরা পারি (পরিচিত শব্দ ...)। তবে ডকারের জন্য এটি হ্যাকের মতো লাগে যখন আমরা কোনও চিত্র তৈরি করে হোস্টিং এন্ট্রি পরিবর্তন করি, কোনও ধারক চালাচ্ছি না। ডকার নেটওয়ার্ক ডিজাইন অ্যাপ্লিকেশন চালিত (ডকার ডটকম থেকে)। যেহেতু হোস্ট এন্ট্রি ডকার নেটওয়ার্কের অংশ, তাই চিত্র থেকে কোনও ধারক চালানোর সময় আমরা এটির সংজ্ঞা দিতে চাই। আপনার যদি সত্যিই কিছু হোস্ট এন্ট্রি যুক্ত করতে হয় তবে আপনি প্রতিবার চিত্র তৈরি করে এগুলি যুক্ত করবেন না, আপনি একবারে এটি বেস চিত্রতে যুক্ত করুন। এটিই সেরা অনুশীলন।
হালকা.জি

2
ডকার বিল্ড করার সময় রকার / চকচকে ইনস্টল.প্যাকেজগুলির সাথে কোনও সমস্যা সমাধান করার জন্য - অ্যাড-হোস্ট: cran.rstudio.com: <আইপিড্রেস> আমার জন্য সমস্যাটি সমাধান করেছেন।
bvanlew

25

ব্যবহার করে আপনি ইমেজ মধ্যে হোস্ট ফাইল সংশোধন করতে পারবেন না echoRUN যখন আপনি ইমেজ থেকে একটি ধারক শুরু পদক্ষেপ কারণ Docker ডেমন ফাইল বজায় রাখা হবে (জন্য / etc / হোস্ট) এবং তার বিষয়বস্তু (হোস্ট এন্ট্রি)।

তবে নিম্নলিখিতগুলি একই অর্জনে ব্যবহার করা যেতে পারে:

ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10   database-server >> /etc/hosts && echo 192.168.239.62   redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ]

এখানে লক্ষ্য করার মূল বিষয়টি হ'ল execডকার ডকুমেন্টেশন হিসাবে কমান্ডের ব্যবহার । এক্সিকিউট এর ব্যবহার জন্য জাভা কমান্ডটিকে পিআইডি 1 হিসাবে তৈরি করবে। ডকার বাধা কেবলমাত্র তাতে সাড়া দেবে।

Https://docs.docker.com/engine/references/builder/#entryPoint দেখুন


TY! এটি দুর্দান্ত সমাধান
জুনে

1
আপনি যদি কুবনেটস সলিউশন খুঁজছেন তবে আপনি হোস্টএলিয়াসগুলি ব্যবহার করতে পারেন। kubernetes.io/docs/concepts/services-networking/… ঠিক যেমন ডকার রচনা অতিরিক্ত_ হোস্টগুলি।
শুভম সিং 9

আরও স্পষ্টভাবে, ENTRYPOINTইমেজ জন্য একটি নির্দেশ নয়। এটি কেবলমাত্র একটি এন্ট্রি পয়েন্ট চিহ্নিত করে যখন আমরা এই চিত্রটি থেকে একটি ধারক চালাই, যার অর্থ হোস্টের প্রবেশটি কেবলমাত্র ধারক চালানোর পরে উপস্থিত থাকে। আমি মনে করি না যে প্রয়োজনীয়তা অপরিহার্য। কিছুটা ভুল বুঝাবুঝি হতে হবে।
হালকা.জি

17

আমি মনে করি ডকার সম্প্রতি --add-hostডকার বিল্ডে পতাকা যুক্ত করেছে যা সত্যিই দুর্দান্ত।

[সম্পাদনা] সুতরাং এই বৈশিষ্ট্যটি 17.04.0-ce আপডেট করা হয়েছিল

পতাকাটির docker buildসাথে কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও --add-hostতথ্যের জন্য দয়া করে এখানে যান: https://docs.docker.com/edge/engine/references/commandline/build/


1
--add-hostবৈশিষ্ট্য সেন্টওএস উপর Docker 12 পাওয়া যায়।
ছুটজ

1
আমি জোর দিয়ে বলতে চাই যে "এই পতাকাটির সাথে যে হোস্টটি যুক্ত হয়েছে কেবল সেগুলি নির্মাণের সময় ব্যবহৃত হয়; এটি ইচ্ছাকৃতভাবে চিত্রটিতে অবিচলিত
সিডা

10

যেহেতু এটি Google এ এখনও প্রথম উত্তর হিসাবে আসে তবে আমি সম্ভাব্য সমাধানটি অবদান রাখব।

এখান থেকে নেওয়া কমান্ড আশ্চর্যজনকভাবে আমার পক্ষে কাজ করেছে (ডকার 1.13.1, উবুন্টু 16.04):

docker exec -u 0 <container-name> /bin/sh -c "echo '<ip> <name> >> /etc/hosts"

প্রাসঙ্গিক নয় তবে এখনও মূল্যবান। ধন্যবাদ.
লাইট.জি

4

এটি যদি কারও পক্ষে উপকারী হয় তবে HOSTALIASESenv ভেরিয়েবল আমার পক্ষে কাজ করেছিল:

echo "fakehost realhost" > /etc/host.aliases
export HOSTALIASES=/etc/host.aliases

3
আপনি কি কুবেরনেটের সাথে ডকারকে বিভ্রান্ত করছেন না? ডকার ডকুমেন্টেশনে আমি হোস্টালিয়াসের কোনও পরিবর্তনশীল দেখতে পাচ্ছি না
অ্যাড্রিয়েন

4

ডকার চালানোর সময় আপনি নিম্নলিখিত কমান্ডটি দিয়ে করতে পারেন

docker run [OPTIONS] --add-host example.com:127.0.0.1 <your-image-name>:<your tag>

এখানে আমি example.comলোকালহোস্ট 127.0.0.1এবং এর কার্যকরীগুলিতে ম্যাপিং করছি ।


3

আমি এডাব্লুএস ইলাস্টিকিয়ানস্টালক + ডকার + সুপারভাইজার্ড ব্যবহার করছি।

দ্রুত উত্তর

কেবল কিছু কোড যুক্ত করুন Dockerfile

CMD echo 123.123.123.123 this_is_my.host >> /etc/hosts; supervisord -n;

1

সম্পূর্ণ উত্তর

  1. hostsআপনি ডকার পাত্রে যুক্ত করতে চান এমন নিজস্ব ফাইল প্রস্তুত করুন ;
1.2.3.4 abc.tv
5.6.7.8 domain.xyz
1.3.5.7 odd.org
2.4.6.8 even.net
  1. hostsকনটেইনারটিতে আপনার ফাইলটি নিম্নলিখিত পংক্তিতে যুক্ত করুন PDockerfile
COPY hosts /etc/hosts_extra
  1. আপনি কি জানেন কিভাবে ব্যবহার করতে পারেন ENTRYPOINTবা CMDবা CRONকাজ তারপর, এটা বা অন্তত নিম্নলিখিত কমান্ড লাইন নিগমবদ্ধ চলমান ধারক ভিতরে এই সঞ্চালন করুন:
cat /etc/hosts_extra >> etc/hosts;
  1. আপনি নিম্নলিখিতটি যুক্ত করতে পারবেন না Dockerfileকারণ পরিবর্তনটি হারিয়ে যাবে:
RUN cat /etc/hosts_extra >> etc/hosts;

0

আপনি - অ্যাড-হোস্ট ব্যবহার করতে পারেনডকার রান চলাকালীন আপনি --add- বিকল্পটি ।

আপনার কেস ব্যবহারের জন্য: ডকার চালান - অ্যাড-হোস্ট মাইঙ্গিনেক্স: 192.168.33.11 [চিত্র_নাম]: [ট্যাগ]

এটি আপনার / ইত্যাদি / হোস্টগুলি আপডেট করবে

আপনি নিম্নলিখিত কমান্ড ব্যবহার করে এটি পরীক্ষা করতে পারেন:

  • ডকার এক্সিকিউটিউট [কনটেইনার_আইডি] sh

যদি sh আপনার পক্ষে কাজ করে না, তবে আপনি বাশ বা / বিন / শ বা / বিন / বাশ চেষ্টা করতে পারেন

  • সিডি ইত্যাদি
  • বিড়াল হোস্ট

-1
Tis is me Dockefile
FROM XXXXX
ENV DNS_1="10.0.0.1 TEST1.COM"
ENV DNS_1="10.0.0.1 TEST2.COM" 
CMD ["bash","change_hosts.sh"]`

#cat change_hosts.sh
su - root -c "env | grep DNS | akw -F "=" '{print $2}' >> /etc/hosts"
  • তথ্য
  • ব্যবহারকারী অবশ্যই মামলা করতে হবে

-2

নিম্নলিখিতটি ডকার বিল্ডের পরিবর্তে ডকার রান চলাকালীন ফাইলটি মাউন্ট করে আমার পক্ষে কাজ করেছে

docker service create --name <name>  --mount type=bind,source=/etc/hosts,dst=/etc/hosts   <image>

ভলিউম ব্যবহার করে একটি ফাইল যুক্ত করা অতিরিক্ত জটিলতা তৈরি করে এবং প্রতিটি হোস্টকে ফাইল থাকতে হবে।
শুভম সিং 20

-11

আপনার ধারকটি চালানোর জন্য কেবলমাত্র একটি দ্রুত উত্তর:

docker exec -it <container name> /bin/bash

ধারকটি একবার খোলে:

cd ..

তারপর

`cd etc`

এবং তারপর আপনি পারেন

cat hosts

বা:

apt-get update
apt-get vim

বা আপনার পছন্দ মতো কোনও সম্পাদক এবং এটি ভিএম-তে খুলতে পারেন, আপনি এখানে আপনার প্রারম্ভিক আইপিটি 0.0.0.0 এ পরিবর্তন করতে পারেন

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