Bagaimana saya bisa mengekspos lebih dari 1 port dengan Docker?

458

Jadi saya punya 3 port yang harus diekspos ke antarmuka mesin. Apakah mungkin melakukan ini dengan wadah Docker?

nubela
sumber
1
Kemungkinan untuk mengarahkan ulang beberapa port. Lihat dokumen
Mark O'Connor

Jawaban:

716

Untuk mengekspos hanya satu port, inilah yang perlu Anda lakukan:

docker run -p <host_port>:<container_port>

Untuk mengekspos banyak port, cukup sediakan beberapa -pargumen:

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
Tania Ang
sumber
4
Terima kasih! Temukan ini di dokumen di sini: docs.docker.com/userguide/dockerlinks/… di mana dikatakanNote: The -p flag can be used multiple times to configure multiple ports.
Ted M. Young
Apakah ada cara untuk menentukan port dalam file konfigurasi? Misalnya menggunakan opsi --env-file?
Giovanni Bitliner
8
@GiovanniBitliner Saya masih cukup baru dalam hal ini, tapi saya cukup yakin Anda akan mendefinisikan port di Dockerfile dengan EXPOSE , kemudian melakukan docker run -P(perhatikan huruf besar) yang secara otomatis mengekspos semua port yang didefinisikan dengan EXPOSE di Dockerfile
Ted Avery
Beberapa port dapat menghentikan proses init di bawah file layanan systemd?
Lanti
1
Saya pikir istilah yang tepat di sini publishbukan expose.
tgogos
290

Langkah 1

Di Anda Dockerfile, Anda dapat menggunakan kata kerja EXPOSEuntuk mengekspos beberapa port.
misalnya

EXPOSE 3000 80 443 22

Langkah 2

Anda kemudian ingin membangun gambar baru berdasarkan di atas Dockerfile.
misalnya

docker build -t foo:tag .

Step3

Kemudian Anda dapat menggunakan -puntuk memetakan port host dengan pelabuhan kontainer, sebagaimana didefinisikan dalam di atas EXPOSEdari Dockerfile.
misalnya

docker run -p 3001:3000 -p 23:22

Jika Anda ingin mengekspos berbagai port berkelanjutan, Anda dapat menjalankan buruh pelabuhan seperti ini:

docker run -it -p 7100-7120:7100-7120/tcp 
mainframer
sumber
17
EXPOSE hanya dokumentasi untuk port yang dipublikasikan dan berguna untuk menghubungkan saja. Daftar lengkap port dapat ditemukan menggunakan -P dan mereka akan secara otomatis dipetakan ke port yang tersedia di host.
Arun Gupta
4
Paparan tidak diperlukan. Hapus langkah pertama atau jadikan opsional.
AmirHossein
27

jika Anda menggunakan docker-compose.ymlfile:

services:
    varnish:
        ports:
            - 80
            - 6081

Anda juga dapat menentukan port host / jaringan

varnish:
    ports:
        - 80:80
        - 6081:6081
Rashidul Islam
sumber
0

Jika Anda membuat wadah dari gambar dan ingin mengekspos beberapa port (tidak mempublikasikan) Anda dapat menggunakan perintah berikut:

buruh pelabuhan membuat --name container name--expose 7000 --expose 7001image name

Sekarang, ketika Anda memulai wadah ini menggunakan docker startperintah, port yang dikonfigurasi di atas akan terbuka.

Referensi Phantom
sumber