Bagaimana cara menentukan nama host untuk wadah yang sedang berjalan?

51

Saya mengalami kesulitan mengatur nama host pada wadah buruh pelabuhan yang sedang beroperasi. Saya juga mengalami kesulitan memahami cara menentukan nama host setelah gambar dimulai.

Saya memulai sebuah wadah dari gambar yang saya unduh:

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

Tapi saya lupa menentukan nama host melalui -h; bagaimana saya bisa menentukan nama host sekarang setelah wadah berjalan?

Miguel Ping
sumber
Bisakah Anda berhenti wadah dan mulai lagi memasok nama host?
dawud
AFAIK yang hanya berfungsi saat Anda runmengambil gambar, bukan saat memulai wadah.
Miguel Ping
Terkadang yang Anda inginkan adalah melihat perintah bash prompt dengan nama yang tepat. Jika demikian, Anda dapat mengedit nilai PS1 dalam .bashrc. Lihatlah askubuntu.com/a/549150/55365 untuk saran. Dalam PS1 apa pun Anda dapat menambahkan string (berwarna) yang dikelilingi oleh * atau # untuk membedakannya, dengan nama server atau layanan.
SPRBRN
@dudud Anda tidak dapat memberikan nama host baru saat menjalankan docker restart dokumentasi
dangonfast

Jawaban:

48

Edit /etc/hostnameadalah satu hal yang Anda perlukan akses ssh di dalam wadah. Jika tidak, Anda dapat memutar wadah dengan -hopsi.

Untuk mengatur nama host dan domain:

$ 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
amitmula
sumber
5
Anda dapat docker exec /bin/bashmenggunakan wadah yang sedang berjalan, tidak perlu menginstal ssh(yang merupakan praktik buruk untuk keperluan administrasi).
jjmontes
Anda mungkin juga ingin mengedit / etc / hosts yang telah dipecahkan dengan benar menjadi alamat.
dtoubelis
2
Anda tidak dapat mengubah nama host dalam wadah berjalan dengan hostname(kemampuan yang hilang). Menjalankan docker run -h <hostname> <image> <container-name>menciptakan wadah baru dengan nama host yang diberikan.
dangonfast
6

Hentikan wadah dan layanan

sudo docker stop CONTAINER_NAME
sudo service docker stop

Edit file config (JSON) [Anda harus membuat backup terlebih dahulu]

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

Menggantikan

"Hostname": "WHATEVER"

dengan

"Nama Inang": "NEW_HOSTNAME"

Mulai wadah dan layanan

sudo service docker start
sudo docker start CONTAINER_NAME

(Opsional Anda juga dapat memasang buruh pelabuhan)

sudo docker attach CONTAINER_NAME

Detail tentang buruh pelabuhan (yaitu CONTAINER_NAME, CONTAINER_ID) dapat diperoleh dengan menjalankan

sudo docker ps -a
Tomot
sumber
tidak bekerja ditimpa setiap kali saya memulai wadah.
Ahmed
itu aneh. saya baru saja mereproduksi langkah-langkah ini dan masih berfungsi. buruh pelabuhan versi 1.7.1. Anda yakin sudah menutup wadah dan layanan sebelum mengedit file?
Tomot
Bekerja pada Docker 17.04.0-ce, ketika mengedit / etc / hostname tidak. Jika Anda belum membuat wadah, jawaban lain dengan -h lebih baik, tetapi dalam kasus saya, saya sudah kesulitan menyiapkan wadah dan tidak ingin membuatnya kembali hanya untuk mengatur nama host.
Una
Tidak berfungsiDocker version 17.05.0-ce, build 89658be
dangonfast
4

Restart wadah akan menjadi pilihan termudah - tetapi Anda juga dapat mengedit / etc / hostname dan pergi dari sana.

James V
sumber
Pengeditan /etc/hostnametidak memiliki efek setelah dimulai ulang, karena ditimpa setiap kali dengan nama host "nyata", dikelola oleh buruh pelabuhan. Anda tidak dapat berjalan hostnamedi wadah, karena wadah tidak memiliki kemampuan untuk operasi itu (secara default, dan Anda tidak ingin mengubahnya)
dangonfast
Dan mengedit /etc/hostnamedan tidak memulai ulang wadah tidak memiliki tujuan.
dangonfast
1

https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces menjelaskan cara untuk melakukan ini. Ide dasarnya adalah menggunakan docker inspectuntuk mendapatkan pid dari wadah, kemudian masukkan namespace uts wadah nsenter. Menjalankan hostnamedi dalam namespace itu akan mengubah nama host untuk instance buruh pelabuhan yang membagikan namespace itu.

Chaim Geretz
sumber
2
tolong tambahkan solusinya langsung di sini, dan bukan tautan eksternal yang mungkin menghilang
Anak Yatim
0

Seperti yang ditunjukkan beberapa orang lainnya, ini dapat diubah untuk kontainer dengan memodifikasi config.v2.jsonfile.

Pastikan saja layanan Docker dihentikan sebelum file diedit, jika tidak maka akan TERLALU MENDATANG. Langkah-langkah HARUS dilakukan dalam urutan ini

  • Hentikan Kontainer
  • Hentikan layanan Docker
  • Ubah /var/lib/docker/containers/CONTAINER_ID/config.v2.jsonfile -

  • Mulai layanan Docker

  • Mulai wadah

Ini telah dikonfirmasi bekerja untuk saya di Docker v17.05.0-ce, menggunakan wadah --net=host. Memodifikasi /etc/hostnamefile tidak berfungsi dan file hanya ditimpa.

pengguna1270949
sumber
-3

Di

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

temukan dan atur

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}
Oleg Neumyvakin
sumber
Tidak bekerja Docker version 17.05.0-ce, build 89658be. Config ditimpa, siapa yang tahu dari mana. Dan nama host itu sendiri tidak berubah setelah restart.
dangonfast