จะระบุชื่อโฮสต์สำหรับคอนเทนเนอร์ที่ใช้งานได้อย่างไร


51

ฉันมีปัญหาในการตั้งค่าชื่อโฮสต์บนคอนเทนเนอร์นักเทียบท่าที่กำลังทำงานอยู่ ฉันยังมีปัญหาในการทำความเข้าใจวิธีระบุชื่อโฮสต์หลังจากที่รูปภาพเริ่มต้นขึ้น

ฉันเริ่มคอนเทนเนอร์จากภาพที่ฉันดาวน์โหลด:

sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss

แต่ฉันลืมระบุชื่อโฮสต์ผ่าน-h; ฉันจะระบุชื่อโฮสต์ได้อย่างไรว่าคอนเทนเนอร์กำลังทำงานอยู่?


คุณสามารถหยุดคอนเทนเนอร์แล้วเริ่มต้นใหม่ด้วยการส่งชื่อโฮสต์หรือไม่
dawud

AFAIK ใช้งานได้เมื่อคุณrunรูปภาพไม่ใช่เมื่อคุณเริ่มคอนเทนเนอร์
Miguel Ping

บางครั้งสิ่งที่คุณต้องการคือการเห็นพรอมต์คำสั่ง bash พร้อมชื่อที่ถูกต้อง หากเป็นกรณีนี้คุณสามารถแก้ไขค่า PS1 ใน. bashrc ดูaskubuntu.com/a/549150/55365สำหรับคำแนะนำ ใน PS1 ใด ๆ คุณสามารถเพิ่มสตริง (สี) ที่ล้อมรอบด้วย * หรือ # เพื่อแยกมันด้วยชื่อของเซิร์ฟเวอร์หรือบริการ
SPRBRN

@dawud คุณไม่สามารถให้ชื่อโฮสต์ใหม่เมื่อเรียกใช้docker restart เอกสาร
dangonfast

คำตอบ:


48

แก้ไข/etc/hostnameเป็นสิ่งหนึ่งที่คุณต้องการเข้าถึง ssh ภายในคอนเทนเนอร์ มิฉะนั้นคุณสามารถหมุนภาชนะด้วย-hตัวเลือก

วิธีตั้งค่าชื่อโฮสต์และโดเมน:

$ docker run -h foo.bar.baz -i -t ubuntu bash
root@foo:/# hostname
foo
root@foo:/# hostname -d
bar.baz
root@foo:/# hostname -f
foo.bar.baz

5
คุณสามารถdocker exec /bin/bashในภาชนะที่ทำงานไม่จำเป็นต้องติดตั้งssh(ซึ่งเป็นแนวทางปฏิบัติที่ไม่ดีสำหรับการบริหาร)
jjmontes

คุณอาจต้องการแก้ไข / etc / hosts ว่าได้รับการแก้ไขอย่างถูกต้องในที่อยู่
dtoubelis

2
คุณไม่สามารถเปลี่ยนชื่อโฮสต์ในคอนเทนเนอร์ที่รันด้วยhostname(ความสามารถหายไป) การรันdocker run -h <hostname> <image> <container-name>สร้างคอนเทนเนอร์ใหม่ที่มีชื่อโฮสต์ที่กำหนด
dangonfast

6

หยุดคอนเทนเนอร์และบริการ

sudo docker stop CONTAINER_NAME
sudo service docker stop

แก้ไขไฟล์กำหนดค่า (JSON) [คุณควรทำการสำรองข้อมูลก่อน]

/var/lib/docker/containers/CONTAINER_ID/config.json

แทนที่

"ชื่อโฮสต์": "สิ่งที่"

กับ

"ชื่อโฮสต์": "NEW_HOSTNAME"

เริ่มคอนเทนเนอร์และบริการ

sudo service docker start
sudo docker start CONTAINER_NAME

(นอกจากนี้คุณยังสามารถแนบนักเทียบท่า)

sudo docker attach CONTAINER_NAME

รายละเอียดเกี่ยวกับนักเทียบท่า (เช่น CONTAINER_NAME, CONTAINER_ID) สามารถรับได้โดยการเรียกใช้

sudo docker ps -a

ไม่ทำงาน ถูกเขียนทับทุกครั้งที่ฉันเริ่มคอนเทนเนอร์
อาเหม็ด

มันแปลกมาก ฉันเพิ่งทำซ้ำขั้นตอนเหล่านี้และยังคงใช้งานได้ นักเทียบท่ารุ่น 1.7.1 แน่ใจหรือไม่ว่าคุณปิดคอนเทนเนอร์และบริการก่อนที่คุณจะแก้ไขไฟล์
Tomot

ใช้งานได้กับ Docker 17.04.0-ce เมื่อแก้ไข / etc / hostname ไม่ได้ หากคุณยังไม่ได้สร้างคอนเทนเนอร์คำตอบอื่น ๆ ที่มี -h นั้นดีกว่า แต่ในกรณีของฉันฉันได้ประสบปัญหาในการตั้งค่าคอนเทนเนอร์แล้วและไม่ต้องการสร้างมันขึ้นมาใหม่เพื่อตั้งชื่อโฮสต์
Una

ใช้งานไม่ได้Docker version 17.05.0-ce, build 89658be
dangonfast

4

การรีสตาร์ทคอนเทนเนอร์จะเป็นตัวเลือกที่ง่ายที่สุด - แต่คุณอาจแก้ไข / etc / hostname และไปจากที่นั่นได้


การแก้ไข/etc/hostnameไม่มีผลหลังจากรีสตาร์ทเนื่องจากมีการเขียนทับทุกครั้งด้วยชื่อโฮสต์ "ของจริง" ที่จัดการโดยนักเทียบท่า คุณไม่สามารถเรียกใช้hostnameบนคอนเทนเนอร์ได้เนื่องจากคอนเทนเนอร์ไม่มีความสามารถสำหรับการดำเนินการนั้น (โดยค่าเริ่มต้นและคุณไม่ต้องการเปลี่ยน)
dangonfast

และการแก้ไข/etc/hostnameและไม่รีสตาร์ทคอนเทนเนอร์ไม่มีวัตถุประสงค์
dangonfast


1

https://evolvingweb.ca/blog/changing-docker-hostnames-namespacesอธิบายวิธีการทำสิ่งนี้ แนวคิดพื้นฐานคือการใช้docker inspectเพื่อให้ได้ pid ของภาชนะแล้วป้อน UTS namespace nsenterของภาชนะผ่าน การทำงานhostnameภายในเนมสเปซนั้นจะเปลี่ยนชื่อโฮสต์สำหรับอินสแตนซ์ของนักเทียบท่าที่แชร์เนมสเปซนั้น


2
โปรดเพิ่มโซลูชันโดยตรงที่นี่และไม่ใช่ลิงก์ภายนอกที่อาจหายไป
Orphans

0

ตามที่คนอื่น ๆ ไม่กี่คนได้ชี้ให้เห็นสิ่งนี้สามารถเปลี่ยนแปลงได้สำหรับภาชนะบรรจุโดยการปรับเปลี่ยนconfig.v2.jsonไฟล์

เพียงตรวจสอบให้แน่ใจว่าบริการ Docker หยุดทำงานก่อนที่จะแก้ไขไฟล์มิฉะนั้นจะเป็น OVERWRITTEN ต้องทำตามขั้นตอนตามลำดับนี้

  • หยุดคอนเทนเนอร์
  • หยุดบริการ Docker
  • แก้ไข/var/lib/docker/containers/CONTAINER_ID/config.v2.jsonไฟล์ - -

  • เริ่มบริการ Docker

  • เริ่มภาชนะ

นี้ได้รับการยืนยันการทำงานสำหรับฉันในหาง v17.05.0-CE --net=hostบนภาชนะที่ใช้ การแก้ไข/etc/hostnameไฟล์ไม่ทำงานและไฟล์ถูกเขียนทับ


-3

ใน

 /var/lib/docker/containers/CONTAINER/config.json

ค้นหาและตั้งค่า

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}

Docker version 17.05.0-ce, build 89658beไม่ทำงาน การกำหนดค่าจะถูกเขียนทับผู้รู้จากที่ใด และชื่อโฮสต์จะไม่เปลี่ยนแปลงหลังจากรีสตาร์ท
dangonfast
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.