Setelah memulai wadah Docker dengan perintah standar ...

docker run -p 123-125:123-125 -it <container_name> "bin/bash" 

... dan keluar dengan Ctrl-p + Ctrl-Q, saya perhatikan bahwa tiba-tiba saya melihat 2 blok di kolom port docker ps output:

100-102 / tcp, 0.0.0.0:123-125:123-125/tcp

Saya tidak pernah menetapkan port 100-102 untuk wadah saya.

Saya tidak bisa mendapatkan 2 hal:

  1. Apa perbedaan antara 2 notasi ini: 100-102 / tcp dan 0.0.0.0:123-125:123-125/TCP dalam output PS Docker?
  2. Mengapa saya memiliki tambahan 100-102 / TCP output di Docker PS Jika parameter My -P hanya listing 123-125: 123-125 / tcp?
1
MiamiBeach 5 April 2021, 10:44

3 jawaban

Jawaban Terbaik

Parameter pertama adalah port exposed oleh wadah Anda. Mereka mungkin terekspos dalam dockerfile yang digunakan untuk membuat gambar. Mereka hanya semacam spesifikasi / dokumentasi yang memberi tahu Anda bahwa Anda mungkin harus menerbitkan port tersebut.

Parameter kedua adalah port yang terpapar yang Anda terikat pada sistem host Anda: Portsare yang ditautkan ke port dari host Anda, dan mereka terbuka untuk koneksi luar yang berasal dari alamat IP apa pun (0.0.0.0). Port-port ini diterbitkan (dengan demikian -p)

Jika Anda telah menjalankan wadah Anda dengan opsi -P, itu akan menerbitkan / mengikat semua port yang terpapar (atau rentang port, dalam kasus Anda). Publishing port dengan -p hanya mengekspos dan mengikat port yang Anda tentukan dengan opsi itu. Yang Anda inginkan di sini.

Berikut ini adalah contoh untuk menjadi lebih jelas:

  1. Saya membuat Dockerfile. Di dalamnya saya mengekspos kisaran port 3000-3002
FROM node:current-alpine

EXPOSE 3000-3002/tcp

COPY . /app

WORKDIR /app

CMD ["node", "server.js"]

  1. Saya membangun gambar: docker build -t testing .
  2. Saya menjalankan wadah: docker run testing

Berikut ini hasil docker ps:

CONTAINER ID   IMAGE     COMMAND                 [...] PORTS           NAMES
59b8a12a8d70   testing   "docker-entrypoint.s…"  [...] 3000-3002/tcp   amazing_gagarin

Seperti yang Anda lihat, saya tidak mempublikasikan port apa pun, tetapi saya dapat melihat port terbuka di bagian PORTS docker ps}

  1. Saya mencoba untuk terhubung ke localhost:3000: tidak ada yang berfungsi - & gt; Pelabuhan tidak dipublikasikan.

  2. Saya meluncurkan wadah lain dengan docker run -p 3005-3007:3005-3007 testing.

Berikut ini hasil docker ps:

CONTAINER ID   IMAGE     COMMAND                 [...] PORTS                                             NAMES
d55dd52d94a3   testing   "docker-entrypoint.s…"  [...] 3000-3002/tcp, 0.0.0.0:3005-3007->3005-3007/tcp   agitated_boyd
  1. Saya mencoba menghubungkan ke localhost:3005: berhasil! - & gt; Saya menerbitkan port saya, mengikatnya ke port host saya, jadi saya dapat terhubung ke mereka (juga karena aplikasi saya mendengarkan port dari 3000-3007)

  2. Saya mencoba untuk terhubung ke localhost:3000: masih tidak berfungsi - & gt; Kisaran port 3000-3002 masih belum dipublikasikan, tetapi masih ditandai sebagai ekspos, memberi tahu saya bahwa saya mungkin ingin menggunakan kisaran ini.

1
Faeeria 5 April 2021, 09:17

Opsi Publik (-P) tidak mengikuti format yang diizinkan:

IP: Hostport: wadaherport | ip :: wadaherport | Hostport: wadaherport | wadah.

Perintah Run yang diberikan memiliki 3 usus besar - tetapi bagian pertama bukan IP. Jadi, saya percaya bahwa Docker tidak mengambil perintah Anda dengan baik.

Perintah Run yang benar, jika Anda ingin mencocokkan port wadah 123..125 ke portsm host yang sesuai adalah:

docker run -p 123-125:123-125 -it <container_name> "bin/bash" 
0
Charlie 5 April 2021, 08:03

Silakan lihat Docker Ref untuk format {{x0) }} Opsi:
format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort

  1. 0.0.0.0 Menentukan IP dari mana wadah Anda dapat diakses di host. 0.0.0.0 Apakah default dan berarti semua alamat IP (I.E. Semua orang yang menghubungkan ke host Anda dapat mengakses wadah Anda melalui port yang terbuka 123-125). Di sisi lain, 127.0.0.1 berarti Anda dapat mengakses wadah Anda hanya dari localhost.

  2. Saya berasumsi port tambahan dapat diekspos oleh gambar dasar Anda (didefinisikan dalam FROM di DockerFile Anda).

BTW, saya tidak yakin apakah sintaks Anda 0.0.0.0:123-125:123:125 dengan tiga titik dua benar.

0
user14967413 5 April 2021, 08:03