Saya tidak yakin apakah saya salah mengerti sesuatu di sini, tetapi sepertinya hanya mungkin untuk mengatur pemetaan port dengan membuat wadah baru dari sebuah gambar. Apakah ada cara untuk menetapkan pemetaan port ke wadah Docker yang ada?
docker
port
lxc
linux-containers
terima kasih
sumber
sumber
Jawaban:
Anda dapat mengubah pemetaan port dengan langsung mengedit
hostconfig.json
file di/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
Anda dapat menentukan [hash_of_the_container] melalui
docker inspect <container_name>
perintah dan nilai bidang "Id" adalah hash.Jadi Anda tidak perlu membuat gambar dengan pendekatan ini. Anda juga dapat mengubah bendera mulai ulang di sini.
PS Anda dapat mengunjungi https://docs.docker.com/engine/admin/ untuk mempelajari cara memulai ulang mesin docker dengan benar sesuai mesin host Anda. Saya digunakan
sudo systemctl restart docker
untuk me-restart mesin buruh pelabuhan saya yang berjalan di Ubuntu 16.04sumber
hostconfig.json
danconfig.v2.json
untuk membuat ini bekerja. Gunakan tautan yang disediakan oleh @rohitmohta untuk melihat detailnya.screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Setelah Anda mendapatkan tty berjalan Anda bisa arahkan ke / var / lib / dockerSaya juga tertarik dengan masalah ini.
Seperti yang disebutkan @Thasmo , penerusan port dapat ditentukan HANYA dengan perintah
docker run
(dandocker create
).Perintah lain,
docker start
tidak memiliki-p
opsi dandocker port
hanya menampilkan penerusan saat ini.Untuk menambahkan penerusan porta, saya selalu mengikuti langkah-langkah ini,
berhenti menjalankan wadah
komit wadah
CATATAN: Di atas,
test02
adalah gambar baru yang saya buat daritest01
wadah.jalankan kembali dari gambar yang dikomit
Dimana 8080 pertama adalah port lokal dan 8080 kedua adalah port container.
sumber
docker start
?Jika dengan "yang ada" yang Anda maksudkan "berjalan", maka (saat ini) tidak mungkin untuk menambahkan pemetaan port.
Anda dapat, bagaimanapun, secara dinamis menambahkan antarmuka jaringan baru dengan misalnya Pipework , jika Anda perlu mengekspos layanan dalam wadah yang sedang berjalan tanpa menghentikan / memulai kembali.
sumber
Tidak yakin apakah Anda bisa menerapkan pemetaan port wadah yang berjalan. Anda dapat menerapkan penerusan porta saat menjalankan wadah yang berbeda dari membuat wadah baru.
akan mulai menjalankan wadah. Tutorial ini menjelaskan pengalihan pelabuhan.
sumber
docker run
membuat dan memulai wadah baru. Ini setara dengan melakukandocker create
diikuti olehdocker start
.Mengedit hostconfig.json tampaknya tidak berfungsi sekarang. Itu hanya berakhir dengan port yang terbuka tetapi tidak dipublikasikan untuk menjadi tuan rumah. Berkomitmen dan menciptakan kembali wadah bukanlah pendekatan terbaik bagi saya. Tidak ada yang disebutkan
docker network
?Solusi terbaik akan menggunakan proxy terbalik dalam jaringan yang sama
Buat jaringan baru jika wadah Anda sebelumnya tidak dalam yang bernama.
docker network create my_network
Bergabunglah dengan wadah Anda saat ini ke jaringan yang dibuat
docker network connect my_network my_existing_container
Mulai layanan proxy yang dibalik (mis. Nginx) menerbitkan port yang Anda butuhkan, bergabung dengan jaringan yang sama
docker run -d --name nginx --network my_network -p 9000:9000 nginx
Secara opsional hapus default.conf di nginx
docker exec nginx rm /etc/nginx/conf.d/default.conf
Buat konfigurasi nginx baru
Salin konfigurasi ke wadah nginx.
docker cp ./my_conf.conf nginx:/etc/nginx/conf.d/my_conf.conf
Mulai ulang nginx
docker restart nginx
Keuntungan : Untuk mempublikasikan port baru, Anda dapat menghentikan / memperbarui / membuat ulang wadah nginx dengan aman sesuai keinginan tanpa menyentuh wadah bisnis. Jika Anda membutuhkan nol waktu turun untuk nginx, dimungkinkan untuk menambahkan lebih banyak layanan proxy yang dibalik yang bergabung dalam jaringan yang sama. Selain itu, sebuah wadah dapat bergabung dengan lebih dari satu jaringan.
Edit:
Untuk membalikkan layanan proxy non-http, file konfigurasi sedikit berbeda. Ini adalah contoh sederhana:
sumber
Dalam contoh Fujimoto Youichi
test01
adalah wadah, sedangkantest02
gambar.Sebelum melakukan,
docker run
Anda dapat menghapus wadah asli dan kemudian menetapkan wadah nama yang sama lagi:(Menggunakan
-P
untuk mengekspos port ke port acak daripada menetapkan secara manual).sumber
Jika Anda menjalankannya
docker run <NAME>
akan muncul gambar baru, yang kemungkinan besar bukan yang Anda inginkan.Jika Anda ingin mengubah gambar saat ini lakukan hal berikut:
docker ps -a
Ambil id wadah target Anda dan buka:
Hentikan wadah:
Ubah file
Dan ganti file
Mulai ulang buruh pelabuhan Anda dan itu akan berhasil.
sumber
Cara lain di sekitar Anda jika Anda tidak nyaman dengan konfigurasi Docker depth IPtables akan menjadi teman Anda.
Ini hanya tipuan bukan cara yang disarankan ini bekerja dengan skenario saya karena saya tidak bisa berhenti wadah saya harap akan membantu Anda juga.
sumber
DOCKER_PORT
untukMACHINE_PORT
, bagian mana yang harus diubah?kami menggunakan alat praktis seperti ssh untuk melakukannya dengan mudah.
Saya menggunakan host ubuntu dan gambar buruh pelabuhan berbasis ubuntu.
ketika port baru perlu dipetakan,
di dalam buruh pelabuhan jalankan perintah berikut
172.17.0.1 adalah ip dari antarmuka docker (Anda bisa mendapatkannya dengan menjalankannya
ifconfig docker0 | grep "inet addr" | cut -f2 -d":" | cut -f1 -d" "
di host).di sini saya memiliki port 8888 lokal yang dipetakan kembali ke host 8888. Anda dapat mengubah port sesuai kebutuhan.
jika Anda memerlukan satu port lagi, Anda dapat mematikan ssh dan menambahkan satu baris lagi -R ke port baru tersebut.
Saya telah menguji ini dengan netcat.
sumber
/var/lib/docker/containers/${container_id}
direktori dan edithostconfig.json
PortBindings.HostPort
yang Anda inginkan perubahannya.sumber
Untuk Pengguna Windows & Mac, ada cara lain yang cukup mudah dan ramah untuk mengubah port pemetaan:
sumber
Jawaban Singkat: Anda tidak dapat menetapkan pemetaan port ke wadah Docker yang ada
Anda membutuhkan wadah baru ... menanganinya.
sumber
Jika Anda hanya ingin mengubah port wadah yang sedang berjalan, Anda harus:
dimana sebagai:
sumber
docker run
perintah,NAME
adalah nama dari gambar untuk menjalankan wadah dari, sedangkan didocker stop
dalamNAME
mengacu pada nama wadah untuk berhenti.