আমি কীভাবে ডকার-কম্পোজে হোস্টনেম সেট করব?


120

আমার docker-compose.ymlফাইলে, আমার নিম্নলিখিতগুলি রয়েছে। তবে ধারকটি হোস্টনামের মানটি গ্রহণ করে না। কোন ধারনা?

dns:
  image: phensley/docker-dns
  hostname: affy
  domainname: affy.com
  volumes:
    - /var/run/docker.sock:/docker.sock

আমি যখন ধারকটিতে হোস্টনামটি যাচাই করি তখন এটি উঠা যায় না affy


1
আপনি রচনাটির কোন সংস্করণ ব্যবহার করছেন?
কোজিরো

উত্তর:



57

এটি সঠিকভাবে কাজ করছে বলে মনে হচ্ছে। যদি আমি আপনার কনফিগারেশনটি কোনও ফাইলে রাখি:

$ cat > compose.yml <<EOF
dns:
  image: phensley/docker-dns
  hostname: affy
  domainname: affy.com
  volumes:
    - /var/run/docker.sock:/docker.sock
EOF

এবং তারপরে জিনিসগুলি সামনে আনুন:

$ docker-compose -f compose.yml up
Creating tmp_dns_1...
Attaching to tmp_dns_1
dns_1 | 2015-04-28T17:47:45.423387 [dockerdns] table.add tmp_dns_1.docker -> 172.17.0.5

এবং তারপরে ধারকের ভিতরে থাকা হোস্টের নামটি যাচাই করুন, সবকিছু ঠিক আছে বলে মনে হচ্ছে:

$ docker exec -it stack_dns_1 hostname
affy.affy.com

1
আপনি রচনাটির কোন সংস্করণ ব্যবহার করছেন?
কোজিরো

এই ফর্ম্যাটটি ডকার-রচনাটির সর্বশেষতম সংস্করণে কাজ করে না। ওয়াইএমএল ফাইলগুলি চূড়ান্ত জিনিস; আপনি কি নিশ্চিত যে এটি ডিএনএসের জন্য সঠিক ফর্ম্যাট?
জর্জ স্টকার

3
ওয়াইএমএল ফাইলগুলি আসলে এত চতুর নয়। "কাজ করে না" এর অর্থ কী? মতে ডক্স , উভয় hostnameএবং domainnameবৈধ docker-compose.ymlঅপশন। আপডেট: সবেমাত্র পরীক্ষিত, এখনও ঠিক কাজ করছে বলে মনে হচ্ছে (ডকার-রচনা সংস্করণ 1.4.2, ডকার সংস্করণ 1.8.2)।
লার্স্ক

ডকার পরিবেশের বাইরে এই হোস্টনামটি প্রকাশ করার কোনও উপায় আছে কি? হোস্ট যদি তাদের ডেনস নাম অনুসারে ডকার পাত্রে প্রবেশ করতে পারে তবে এটি দুর্দান্ত হবে।
পল প্রীত

1
এটি সম্ভব, এবং সম্ভবত এটি নিজস্ব প্রশ্ন মূল্যবান। আপনি যদি "ডকার ডিএনএস" অনুসন্ধান করেন তবে বেশ কয়েকটি প্রাসঙ্গিক ফলাফল পাবেন; প্রথমে কী আছে তা একবার দেখুন।
larsks

53

আমি দেখতে পেলাম যে হোস্টনামটি ব্যবহার করার সময় অন্যান্য পাত্রে দৃশ্যমান ছিল না docker run। এটি আলোচনার অংশ সহ একটি পরিচিত সমস্যা (সম্ভবত আরও একটি পরিচিত বৈশিষ্ট্য) হিসাবে পরিণত হয়েছে:

আমাদের সম্ভবত হোস্ট-নেম ব্যবহার সম্পর্কে ডক্সে একটি সতর্কতা যুক্ত করা উচিত। আমি মনে করি এটি খুব কমই দরকারী।

হোস্টনাম নির্ধারণের সঠিক উপায় - কনটেইনার নেটওয়ার্কিংয়ের ক্ষেত্রে - একটি উপন্যাসকে এরূপভাবে সংজ্ঞায়িত করা :

services:
  some-service:
    networks:
      some-network:
        aliases:
          - alias1
          - alias2

দুর্ভাগ্যক্রমে এটি এখনও কাজ করে না docker run। কাজটি হ'ল ধারকটির একটি নাম নির্ধারণ করা:

docker-compose run --name alias1 some-service

এবং alias1অন্য পাত্রে থেকে পিন করা যেতে পারে।

আপডেট: @ গ্রিলিক্স হিসাবে উল্লেখ করা হয়েছে, আপনার সংজ্ঞাযুক্ত উপকরণগুলি docker-compose run --use-aliasesউপলব্ধ করার জন্য ব্যবহার করা উচিত ।


11
আমি এই সমস্যায় আটকে আছি যে আমি অন্যান্য ধারক থেকে হোস্টনামে ধারক অ্যাক্সেস করতে পারি না। এবং পুরো ইন্টারনেটে আপনিই একমাত্র যিনি এই সমস্যাটি বলেছিলেন .. ইতিমধ্যে 20 ঘন্টা ধরে
গুগল হচ্ছে

7
একই অবস্থা! এটি উন্মাদ যে লক্ষ লক্ষ বিকাশকারী ডকারকে ব্যবহার করে বলে মনে হয় তবে কোনও বাক্স কীভাবে একটি সাধারণ নাম দিতে হয় তা এমনকি অফিশিয়াল ডকসও নয় nobody আপনাকে অনেক ধন্যবাদ :)
সিকিক

1
যদি এমন কিছু ঘটে, এখন আমরা ব্যবহার করতে পারেন --use-aliasesসঙ্গে docker-compose run। এটি runকমান্ডের উপরেরটির হার্ডকোডিং এড়াতে পারবে
গ্রিলিক্স

38

ডকার ডকুমেন্টেশনের উপর ভিত্তি করে: https://docs.docker.com/compose/compose-file/#/command

আমি কেবল hostname: <string> আমার ডকার-রচনা ফাইলটি রেখেছি।

উদাহরণ:

[...]

lb01:
  hostname: at-lb01
  image: at-client-base:v1

[...]

এবং ধারক lb01 at-lb01হোস্টনাম হিসাবে তুলে ধরে ।


ডকার-কম্পোজ ফাইলটিতে যদি আপনার একাধিক পাত্রে থাকে তবে আপনি কি প্রতিটি পাত্রে হোস্টনাম সেট করবেন? খুব অদক্ষ মনে হচ্ছে?
vgoklani

6
আপনার যদি ধারকগুলির জন্য সুপরিচিত নামগুলির প্রয়োজন হয় তবে এটি একটি কার্যকর সমাধান।
মার্সেলো রোমানি

9

আমি যে সর্বাধিক সহজ উপায়টি পেয়েছি তা হ'ল docker-compose.ymlদেখুন ধারকটির নাম ডকুমেন্টেশনটিতে কেবল ধারকের নাম সেট করা । এটি ডকার-কম্পোজ ভি 1 + এর ক্ষেত্রে প্রযোজ্য। এটি কনটেইনার থেকে ধারক হয়ে কাজ করে, হোস্ট মেশিন থেকে ধারক পর্যন্ত নয়।

services:
  dns:
    image: phensley/docker-dns
    container_name: affy

এখন আপনার affyধারকটির নাম ব্যবহার করে অন্য ধারক থেকে অ্যাক্সেস করা উচিত । উন্নয়নের পরিবেশে একাধিক redis সার্ভারের জন্য আমাকে এটি করতে হয়েছিল।

নোট দ্রষ্টব্য এতক্ষণ কাজ করে যতক্ষণ আপনার স্কেল প্রয়োজন হয় না। যেমন স্বতন্ত্র বিকাশকারী পরিবেশের সংমিশ্রণ।


ইন Compose 3.7একমাত্র উপায় আমি ডাটাবেসের সেবা হোস্টনাম একই স্ট্যাকের অন্য একটি পরিষেবা ধারক মধ্যে থেকে দেখা যায় পেয়েছিলাম হোস্টনাম যেমন পরিষেবার নাম ছিল। hostname:সম্পত্তি ব্যবহার ব্যর্থ হয়েছে। পরিবেশটি HOSTNAME = নির্মাণ ব্যবহার ব্যর্থ হয়েছে।
স্টিফেন

আর একটি সমাধান যা কাজ করেছিল, তা aliasesহল fozসমাধান হিসাবে বর্ণিত সম্পত্তিটি ব্যবহার করা ।
স্টিফেন

1
এটি দুর্দান্ত কাজ করে তবে কিছুটা অগোছালো - আমার এখন যা প্রয়োজন তা অর্জনের জন্য আমি এখন সেটিংস container_nameএবং hostnameএকই মান নিয়ে চলেছি
অলিভার ডুঙ্গি

3

একটি ওয়ার্কিং কেডিসি করার জন্য আমার ফ্রিপা ধারক স্পিন করা দরকার ছিল এবং এটির একটি হোস্টনাম দিতে হয়েছিল অন্যথায় এটি চালিত হয় না। পরিশেষে আমার জন্য যা কাজ করেছে তা HOSTNAMEরচনায় এনভ ভেরিয়েবল নির্ধারণ করছে :

version: 2
services:
  freeipa:
    environment:
      - HOSTNAME=ipa.example.test

এখন এটি কাজ করছে:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test

2
আমার জন্য, স্লিম ব্যবহার করে, এর ফলে একটি HOSTNAME এনভায়রনমেন্ট ভেরিয়েবলের ফলাফল হয় যা ধারকটির আসল হোস্ট নেমে কোনও প্রভাব ফেলে না
অলিভার ডঙ্গি

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

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