ডকার পাত্রে স্থির আইপি বরাদ্দ করুন


205

আমি এখন একটি স্থির আইপি 172.17.0.1 বরাদ্দ করার চেষ্টা করছি যখন কোনও ডকারের ধারক শুরু হবে।

আমি 2121 বন্দরটি এই ধারকটির ssh বন্দর হিসাবে ব্যবহার করি যাতে আমি এই ধারকটি 2122 পোর্ট শুনতে পারি।

sudo docker run -i -t -p 2122:2122 ubuntu

এই কমান্ডটি 172.17.0.5 এর মতো একটি এলোমেলো আইপি সহ একটি ডকার ধারক চালাবে, তবে ধারকটিতে আমার একটি নির্দিষ্ট আইপি নির্ধারণ করতে হবে।

নিম্নলিখিত শেল স্ক্রিপ্টটি হ'ল আমি উন্নত নেটওয়ার্ক সেটিংসে ডকার ডকুমেন্টেশনটি উল্লেখ করি।

pid=$(sudo docker inspect -f '{{.State.Pid}}' <container_name> 2>/dev/null)
sudo rm -rf /var/run/netns/*
sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid
sudo ip link add A type veth peer name B
sudo brctl addif docker0 A
sudo ip link set A up
sudo ip link set B netns $pid
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link delete eth0
sudo ip netns exec $pid ip link set dev B name eth0
sudo ip netns exec $pid ip link set eth0 address 12:34:56:78:9a:bc
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link set eth0 up
sudo ip netns exec $pid ip addr add 172.17.0.1/16 dev eth0
sudo ip netns exec $pid ip route add default via 172.17.42.1

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


আমি আশঙ্কা করছি যে এই প্রশ্নের কোনও সহজ উত্তর নেই, github.com/docker/docker/issues/6743 এবং github.com/docker/docker/issues/1179 দেখুন , এবং github.com/jpetazzo/pipework পড়ুন
ব্যবহারকারী 2915097

@ অ্যালারিলো আপনি কি কনটেইনারটির ভিতরে একটি এসএসডি শুরু করেছিলেন তা নিশ্চিত করতে পারবেন?
ব্রায়ান

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

হ্যাঁ, আমি নিশ্চিত হয়েছি যে আমি
ধারকটির

উত্তর:


291

ডকার সংস্করণ 1.10.1 সহ সহজ, 9e83765 বিল্ড করুন।

প্রথমে আপনাকে নিজের ডকার নেটওয়ার্ক তৈরি করতে হবে (মাইনেট 123)

docker network create --subnet=172.18.0.0/16 mynet123

কেবল চিত্র চালানোর চেয়ে (আমি উদাহরণ হিসাবে উবুন্টু নেব)

docker run --net mynet123 --ip 172.18.0.22 -it ubuntu bash

তারপরে উবুন্টু শেলের মধ্যে

ip addr

অতিরিক্ত হিসাবে আপনি ব্যবহার করতে পারে

  • --hostname একটি হোস্টনাম নির্দিষ্ট করতে
  • --add-host / ইত্যাদি / হোস্টগুলিতে আরও এন্ট্রি যুক্ত করতে

Https://docs.docker.com/engine/references/commandline/network_create/ এ ডক্স (এবং আপনাকে কেন নেটওয়ার্ক তৈরি করতে হবে)


1
দুর্দান্ত উত্তর - স্রেফ কিছু অতিরিক্ত তথ্য যুক্ত করুন: blog.jessfraz.com/post/ips-for-all-the-things
ওলে

@ ক্যান্টস্লিপনো কোনও কারণে আমার নিজের ডিফল্ট তৈরি ব্রিজ বি0 ব্যবহার করা দরকার যা সিস্টেম বুটের সময় ইন্টারফেস ফাইলটিতে তৈরি হয়েছিল (সুতরাং এটি ডকার নেটওয়ার্ক তৈরির সাহায্যে তৈরি করা হয়নি), আপনি কি আমাকে পরামর্শ দিতে পারেন যে আমি কীভাবে একই প্রভাব পেতে পারি - -প প্যারামিটার (কোনও ধারকটির জন্য নির্দিষ্ট আইপি ঠিকানা পান) ডকার ব্যবহার করে আমার সেতু তৈরি না করে?
মোহাম্মদ নুরাল্ডিন

@ মোহাম্মদ নুরাল্ডিন ​​আমি পুরোপুরি বুঝতে পারি না - এগুলিও একটি নতুন প্রশ্নের মতো মনে হচ্ছে, আমার মনে হয় আপনার এটি জিজ্ঞাসা করা উচিত।
ক্যান্টস্লিপনাও

@ ক্যান্টস্লিপনা এখন আমার অর্থ কন্টেইনারটির আইপি ঠিকানা ঠিক করা দরকার যদিও আমি কাস্টম ব্রিজ ব্যবহার করছি না (সুতরাং - আইপি প্যারামিটারটি ব্যবহার করা যায় না), আপনি কি এটি পাওয়ার জন্য কোনও উপায়ের পরামর্শ দিচ্ছেন?
মোহাম্মদ নুরাল্ডিন

নিবন্ধন করুন যেমনটি আমি বলেছি, আপনার প্রশ্নটি কোনও মন্তব্য হিসাবে নয়, প্রশ্ন হিসাবে পোস্ট করুন - সম্ভবত এমন কেউ আছেন যে উত্তরটি জানেন।
ক্যান্টস্লিপনাও

89

জন্য docker-composeআপনাকে নিম্নলিখিত ব্যবহার করতে পারেনdocker-compose.yml

version: '2'
services:
  nginx:
    image: nginx
    container_name: nginx-container
    networks:
      static-network:
        ipv4_address: 172.20.128.2
networks:
  static-network:
    ipam:
      config:
        - subnet: 172.20.0.0/16
          #docker-compose v3+ do not use ip_range
          ip_range: 172.28.5.0/24

হোস্ট থেকে আপনি পরীক্ষা করে পরীক্ষা করতে পারেন:

docker-compose up -d
curl 172.20.128.2

আধুনিক docker-composeযে ঘন ঘন আইপি ঠিকানা পরিবর্তন করে না।

আপনার docker-composeএকক লাইনে সমস্ত ধারকগুলির আইপস সন্ধান করতে:

for s in `docker-compose ps -q`; do echo ip of `docker inspect -f "{{.Name}}" $s` is `docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $s`; done

আপনি যদি স্বয়ংক্রিয় করতে চান, তবে আপনি উদাহরণ উদাহরণটির মতো কিছু ব্যবহার করতে পারেন


2
দেখে মনে হচ্ছে এটি কেবল ডকার-রচনা v2, v3 ব্রেক সামঞ্জস্যতে কাজ করবে।
আন্দ্রেজেজ রেহমান

4
ডকার-কমপেজ ভি 3 ব্যবহারের সময় অপসারণ করুনip_range
আন্দ্রেজেজ রেহমান

যদিও আমি আইপ্রেঞ্জ পাই না। এটি কি সাবনেট দ্বারা আবৃত নয়? যাইহোক, আপনাকে ধন্যবাদ! এটি আমার "আমার মঙ্গো ধারকটির আইপি আবার দেখতে হবে" - ইস্যু
বেন

1
রচনা সংস্করণ 3 এ আইপি ঠিকানা নির্দিষ্ট করার কোনও উপায় আছে কি?
ইলেওন

2
সমাধানটি আমার জন্য ছাড়াই ভাল কাজ করে ip_range। আমি সংস্করণটি ব্যবহার করছি: '3.4'।
মিখাইল মরফিকভ

24

সরাসরি উত্তর নয় তবে এটি সাহায্য করতে পারে।

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

  1. আমি ডকার হোস্টে সমস্ত পরিষেবার জন্য আইপি এলিয়াস তৈরি করি
  2. তারপরে আমি এই আইপি থেকে কনটেইনারগুলিতে পুনর্নির্দেশক প্রতিটি পরিষেবা পরিচালনা করি যাতে প্রতিটি পরিষেবার নিজস্ব স্ট্যাটিক আইপি থাকে যা বহিরাগত ব্যবহারকারী এবং অন্যান্য পাত্রে ব্যবহার করা যেতে পারে।

নমুনা:

docker run --name dns --restart=always -d -p 172.16.177.20:53:53/udp dns
docker run --name registry --restart=always -d -p 172.16.177.12:80:5000 registry
docker run --name cache --restart=always -d -p 172.16.177.13:80:3142 -v /data/cache:/var/cache/apt-cacher-ng cache
docker run --name mirror --restart=always -d -p 172.16.177.19:80:80 -v /data/mirror:/usr/share/nginx/html:ro mirror
...

ধন্যবাদ ~ আমি এটি জানি। ঠিক যেমন github.com/brandon-rhodes/fopnp/tree/m/playground do। আমি এটা চেষ্টা করব.
ল্যারিলো

1
এটি একটি খুব ভাল সমাধান, আমি শুধু নতুন ব্যবহারকারীদের aliasing বিষয়ে জানার জন্য জন্য এই লিঙ্কে সংযুক্ত হবে cyberciti.biz/faq/...
মোহাম্মদ Noureldin

সুন্দর সমাধানের জন্য আপনাকে ধন্যবাদ।
রবীন্দ্রসিংহ 13

4

এটি আমার পক্ষে কাজ করে।

দিয়ে একটি নেটওয়ার্ক তৈরি করুন docker network create --subnet=172.17.0.0/16 selnet

ডকার চিত্র চালান docker run --net selnet --ip 172.18.0.2 hub

প্রথমে পেয়েছি

docker: Error response from daemon: Invalid address 172.17.0.2: It does not belong to any of this network's subnets.
ERRO[0000] error waiting for container: context canceled

সমাধান: আইপি এর দ্বিতীয় চতুর্থাংশ বৃদ্ধি। .17 এর পরিবর্তে।]


3
আছে: 2 বছর বয়স্ক অনুরূপ / অভিন্ন উত্তর এই পৃষ্ঠাটির অন্যত্রে এর stackoverflow.com/a/35359185/694469
KajMagnus

2

আমি dockerise করার চেষ্টা করার সময় এই সমস্যা উপর পদস্খলিত নির্মাণের জন্য Avahi যা সঠিকভাবে কাজ করতে তার সর্বজনীন IP সচেতন হতে হবে। ডকারে স্থির আইপি অ্যাসাইনমেন্টের জন্য সমর্থন না থাকার কারণে ধারককে স্থির আইপি নির্ধারণ করা জটিল ।

এই নিবন্ধটি বর্ণনা করে কৌশল কিভাবে ধারক করতে স্থির IP দায়িত্ব অর্পণ করা ডেবিয়ান :

  1. দিয়ে ডকার পরিষেবা শুরু করা উচিত DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"। আমি ধরে নিয়েছি যে br0সেতুটি ইতিমধ্যে কনফিগার করা আছে।

  2. পাত্রে দিয়ে শুরু করা উচিত --cap-add=NET_ADMIN --net=bridge

  3. ইনসাইড ধারক pre-up ip addr flush dev eth0মধ্যে /etc/network/interfacesনিম্নলিখিত উদাহরণ হিসাবে Docker দ্বারা নিয়োগ IP ঠিকানা খারিজ করতে ব্যবহার করা যেতে পারে:


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    pre-up ip addr flush dev eth0
    address 192.168.0.249
    netmask 255.255.255.0
    gateway 192.168.0.1
  1. ধারকগুলির প্রবেশের স্ক্রিপ্টটি শুরু হওয়া উচিত /etc/init.d/networking start। এছাড়াও /etc/hostsডকারের দ্বারা নির্ধারিত আইপি-র উল্লেখগুলি সরিয়ে ফেলার জন্য এন্ট্রি স্ক্রিপ্টের ফাইল সম্পাদনা বা পপুলেট করা দরকার ।

2

আইপি চালানোর সময় আপনি সেট করতে পারেন।

docker run --cap-add=NET_ADMIN -dit imagename /bin/sh -c "/sbin/ip addr add 172.17.0.12 dev eth0; bash"

আমার উদাহরণটি https://github.com/RvdGijp/mariadb-10.1-galera এ দেখুন


দুর্ভাগ্যক্রমে এটি আরও একটি আইপি ঠিকানা যুক্ত করে, যদি আইপি ঠিকানাটি প্রক্রিয়াটিতে আগে বরাদ্দ করা হয়, এর ফলস্বরূপ দুটি আইপি ঠিকানা রয়েছে
ডেভি

1

আপনি তাদের নাম দ্বারা অন্যান্য পাত্রে পরিষেবা অ্যাক্সেস করতে পারেন ( ping apacheআইপি পাবেন বা curl http://apacheHTTP পরিষেবাটি অ্যাক্সেস করবে) এবং এটি স্ট্যাটিক আইপি-র বিকল্প হতে পারে।


3
1.8 এর ডকার সংস্করণে এটি সরাসরি কাজ করে। নতুন সংস্করণে, আপনাকে অবশ্যই এই ধারকগুলিকে মুছে ফেলা উচিত।
গুইসং তিনি

0

আপনি যদি চান যে আপনার ধারকটির নিজস্ব ভার্চুয়াল ইথারনেট সকেট (এটির নিজস্ব ম্যাক ঠিকানা সহ), আইপটিবল রয়েছে তবে ম্যাকভ্লান ড্রাইভারটি ব্যবহার করুন। আপনার / আইএসপিএস রাউটারে ট্র্যাফিকের যাত্রাপথের প্রয়োজন হতে পারে।

https://docs.docker.com/engine/userguide/networking/get-started-macvlan

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