CodeBlanks Logo Icon CodeBlanks

-p bayrağı

-p bayrağı ile port eşleştirmeyi öğrenirsin.

-p bayrağı

-p (--publish) biçimi [ana_makine_ip:]ana_makine_portu:container_portu[/protokol]'dur. Sol taraf ana makine, sağ taraf container'dır; bunu karıştırmak en sık hatadır:

docker run -d -p 3000:8080 api:1.0       # localhost:3000 -> container 8080
docker run -d -p 5353:53/udp dns-sunucu  # UDP portu

Port çakışması

Bir ana makine portu yalnızca bir container'a (ya da sürece) yayınlanabilir. İkinci deneme hata verir; farklı bir ana makine portu seçilir:

$ docker run -d -p 8080:80 nginx
$ docker run -d -p 8080:80 nginx
Error: Bind for 0.0.0.0:8080 failed: port is already allocated
$ docker run -d -p 8081:80 nginx      # ikinci kopya 8081'de

Uygulama İki kopya, iki port

api:1.0 image'ından iki container'ı arka planda başlat: api1 ana makinenin 3000 portunu, api2 3001 portunu container'ın 8080 portuna eşlesin.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
docker run -d --name api1 -p 3000:8080 api:1.0
docker run -d --name api2 -p 3001:8080 api:1.0

Beklenen çıktı

b1c2d3e4f5a6
c2d3e4f5a6b7

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Uygulama container içinde 8080'i dinliyor ve sen tarayıcıda localhost:3000 açmak istiyorsun. Hangisi doğrudur?

  • --expose 3000
  • -p 3000:8080 Doğru cevap
  • -p 8080:3000
  • -p 3000

Açıklama: Ana makine solda, container sağdadır.

2 UDP portunu yayınla.

Soru
docker run -d -p 5353:53____ dns-sunucu
Cevap
docker run -d -p 5353:53/udp dns-sunucu

Açıklama: Protokol eğik çizgiyle eklenir; varsayılan tcp'dir.

3 Eşlemeleri eşleştir.

Kavram Anlamı
-p 3000:8080 localhost:3000 → 8080
-p 8081:80 localhost:8081 → 80
/udp UDP protokolü
port is already allocated Ana makine portu dolu

Başlangıç bölümündeki tüm dersler