{"id":39449,"date":"2026-02-21T17:30:39","date_gmt":"2026-02-21T14:30:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/"},"modified":"2026-02-21T17:30:39","modified_gmt":"2026-02-21T14:30:39","slug":"docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/","title":{"rendered":"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim"},"content":{"rendered":"<h2>Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim<\/h2>\n<p>Docker, modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinin vazge\u00e7ilmez bir par\u00e7as\u0131 haline geldi. Uygulamalar\u0131 izole edilmi\u015f kapsay\u0131c\u0131larda \u00e7al\u0131\u015ft\u0131rma yetene\u011fi, geli\u015ftiricilere b\u00fcy\u00fck bir esneklik ve tutarl\u0131l\u0131k sunar. Ancak, bu g\u00fc\u00e7l\u00fc arac\u0131n inceliklerini tam olarak anlamamak, \u00fcretim ortam\u0131nda ciddi sorunlara yol a\u00e7abilir. \u0130\u015fte size, Docker port y\u00f6netiminde yapt\u0131\u011f\u0131m ve beni \u00f6nemli dersler \u00e7\u0131karmaya iten ger\u00e7ek bir \u00fcretim hatas\u0131n\u0131n hikayesi. Bu makalede, hatam\u0131n detaylar\u0131n\u0131, nedenlerini ve bu t\u00fcr sorunlardan ka\u00e7\u0131nmak i\u00e7in izlenmesi gereken en iyi uygulamalar\u0131 bulacaks\u0131n\u0131z.<\/p>\n<h3>Docker A\u011f Temelleri ve Port Kavram\u0131<\/h3>\n<p>Docker kapsay\u0131c\u0131lar\u0131, ana makineden izole edilmi\u015f bir ortamda \u00e7al\u0131\u015f\u0131r. Bu izolasyon, a\u011f ileti\u015fimi i\u00e7in de ge\u00e7erlidir. Bir kapsay\u0131c\u0131 i\u00e7indeki uygulaman\u0131n d\u0131\u015f d\u00fcnya ile veya di\u011fer kapsay\u0131c\u0131larla ileti\u015fim kurabilmesi i\u00e7in belirli portlar\u0131n do\u011fru \u015fekilde yap\u0131land\u0131r\u0131lmas\u0131 gerekir. Bu, Docker&#8217;\u0131n a\u011f mekanizmalar\u0131n\u0131 anlamay\u0131 zorunlu k\u0131lar.<\/p>\n<h4>Kapsay\u0131c\u0131 \u0130zolasyonu ve A\u011f \u0130leti\u015fimi<\/h4>\n<p>Her Docker kapsay\u0131c\u0131s\u0131, varsay\u0131lan olarak kendi a\u011f y\u0131\u011f\u0131n\u0131na sahiptir. Bu, kapsay\u0131c\u0131lar\u0131n birbirlerinden ve ana makineden ba\u011f\u0131ms\u0131z IP adreslerine sahip oldu\u011fu anlam\u0131na gelir. Bir kapsay\u0131c\u0131 i\u00e7indeki bir uygulama, varsay\u0131lan olarak sadece kendi i\u00e7 a\u011f\u0131nda tan\u0131ml\u0131 portlar \u00fczerinden eri\u015filebilir. D\u0131\u015far\u0131dan eri\u015fim sa\u011flamak i\u00e7in \u00f6zel yap\u0131land\u0131rmalar gereklidir.<\/p>\n<h4>Portlar\u0131n Rol\u00fc ve \u00d6nemi<\/h4>\n<p>Portlar, bir bilgisayar a\u011f\u0131nda \u00e7al\u0131\u015fan uygulamalar\u0131n veya servislerin kendilerini tan\u0131mlad\u0131\u011f\u0131 ve ileti\u015fim kurdu\u011fu sanal u\u00e7 noktalard\u0131r. \u00d6rne\u011fin, bir web sunucusu genellikle 80 (HTTP) veya 443 (HTTPS) portlar\u0131n\u0131 kullan\u0131rken, bir veritaban\u0131 farkl\u0131 bir portu dinler. Docker&#8217;da portlar, kapsay\u0131c\u0131 i\u00e7indeki bir servisin d\u0131\u015f d\u00fcnyaya veya di\u011fer servislere nas\u0131l sunulaca\u011f\u0131n\u0131 belirler.<\/p>\n<h4>Docker&#8217;da A\u011f Modlar\u0131 (Bridge, Host, None, Overlay)<\/h4>\n<p>Docker, farkl\u0131 a\u011f ihtiya\u00e7lar\u0131na y\u00f6nelik \u00e7e\u015fitli a\u011f modlar\u0131 sunar:<\/p>\n<ul>\n<li><strong>Bridge (K\u00f6pr\u00fc) A\u011f\u0131:<\/strong> Varsay\u0131lan a\u011f modudur. Her kapsay\u0131c\u0131ya \u00f6zel bir IP adresi atan\u0131r ve Docker, ana makine \u00fczerinde bir sanal k\u00f6pr\u00fc olu\u015fturarak kapsay\u0131c\u0131lar\u0131n birbirleriyle ve d\u0131\u015f d\u00fcnyayla ileti\u015fim kurmas\u0131n\u0131 sa\u011flar. Port e\u015flemesi (port mapping) bu modda yayg\u0131n olarak kullan\u0131l\u0131r.<\/li>\n<li><strong>Host (Ana Makine) A\u011f\u0131:<\/strong> Kapsay\u0131c\u0131, ana makinenin a\u011f y\u0131\u011f\u0131n\u0131n\u0131 do\u011frudan kullan\u0131r. Bu, kapsay\u0131c\u0131n\u0131n ana makineyle ayn\u0131 IP adresine ve portlara sahip olaca\u011f\u0131 anlam\u0131na gelir. Performans avantajlar\u0131 sunsa da, g\u00fcvenlik ve izolasyon a\u00e7\u0131s\u0131ndan riskler bar\u0131nd\u0131r\u0131r.<\/li>\n<li><strong>None (Yok) A\u011f\u0131:<\/strong> Kapsay\u0131c\u0131ya herhangi bir a\u011f aray\u00fcz\u00fc atanmaz. Sadece \u00f6zel durumlarda veya a\u011fa ihtiya\u00e7 duymayan kapsay\u0131c\u0131lar i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>Overlay (Katmanl\u0131) A\u011f\u0131:<\/strong> Birden fazla Docker ana makinesi aras\u0131nda kapsay\u0131c\u0131lar\u0131n ileti\u015fim kurmas\u0131n\u0131 sa\u011flar. Genellikle Docker Swarm gibi orkestrasyon ara\u00e7lar\u0131yla kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<p>Benim hatam, genellikle Bridge a\u011f modunda ve port e\u015flemesiyle ilgili temel bir yan\u0131lg\u0131dan kaynaklan\u0131yordu.<\/p>\n<h3>EXPOSE ve -p Aras\u0131ndaki Fark: Temel Yan\u0131lg\u0131<\/h3>\n<p>Docker port y\u00f6netiminde en s\u0131k yap\u0131lan hatalardan biri, <code>Dockerfile<\/code> i\u00e7indeki <code>EXPOSE<\/code> talimat\u0131 ile <code>docker run<\/code> komutundaki <code>-p<\/code> (veya <code>--publish<\/code>) flag&#8217;inin i\u015flevlerini kar\u0131\u015ft\u0131rmakt\u0131r. Bu iki kavram\u0131n farkl\u0131 ama\u00e7lar\u0131 vard\u0131r ve yanl\u0131\u015f anla\u015f\u0131lmas\u0131, beklenmedik g\u00fcvenlik a\u00e7\u0131klar\u0131na veya eri\u015fim sorunlar\u0131na yol a\u00e7abilir.<\/p>\n<h4><code>EXPOSE<\/code> Komutu Ne \u0130\u015fe Yarar?<\/h4>\n<p><code>EXPOSE<\/code> talimat\u0131, bir <code>Dockerfile<\/code> i\u00e7inde kullan\u0131l\u0131r ve kapsay\u0131c\u0131 i\u00e7inde hangi portlar\u0131n dinlendi\u011fini belgelemek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bu, kapsay\u0131c\u0131y\u0131 kullanan ki\u015filere, uygulaman\u0131n hangi portlar \u00fczerinden hizmet verdi\u011fini bildiren bir meta veri gibidir.<\/p>\n<pre><code class=\"language-dockerfile\">FROM nginx:latest\nEXPOSE 80\nCMD [\"nginx\", \"-g\", \"daemon off;\"]\n<\/pre>\n<p><\/code><br \/>\nYukar\u0131daki \u00f6rnekte, Nginx'in 80 numaral\u0131 portu dinledi\u011fi belirtilmi\u015ftir. Ancak <code>EXPOSE 80<\/code> komutu, bu portu ana makineye veya d\u0131\u015f d\u00fcnyaya otomatik olarak a\u00e7maz. Sadece bilgilendirme ama\u00e7l\u0131d\u0131r ve Docker'\u0131n a\u011f yap\u0131land\u0131rmas\u0131 i\u00e7in bir ipucu sa\u011flar. \u00d6rne\u011fin, Docker Compose veya <code>docker run<\/code> komutunda <code>-P<\/code> (b\u00fcy\u00fck P) flag'i kullan\u0131ld\u0131\u011f\u0131nda, <code>EXPOSE<\/code> edilen portlar rastgele ana makine portlar\u0131na e\u015flenebilir.<\/p>\n<h4><code>-p<\/code> (Publish) Flag'inin G\u00f6revi<\/h4>\n<p><code>-p<\/code> veya <code>--publish<\/code> flag'i, <code>docker run<\/code> komutu ile kullan\u0131l\u0131r ve as\u0131l port e\u015flemesini (port mapping) yapar. Bu flag, kapsay\u0131c\u0131 i\u00e7indeki bir portu ana makinedeki belirli bir porta ba\u011flayarak d\u0131\u015far\u0131dan eri\u015filebilir hale getirir.<\/p>\n<pre><code class=\"language-bash\">docker run -p 8080:80 my-nginx-image\n<\/pre>\n<p><\/code><br \/>\nBu komut, <code>my-nginx-image<\/code> kapsay\u0131c\u0131s\u0131n\u0131n i\u00e7indeki 80 numaral\u0131 portu, ana makinenin 8080 numaral\u0131 portuna e\u015fler. Art\u0131k ana makinenin 8080 portuna gelen istekler, kapsay\u0131c\u0131n\u0131n 80 portuna y\u00f6nlendirilecektir.<\/p>\n<pre><code class=\"language-bash\">docker run -p 127.0.0.1:8080:80 my-nginx-image\n<\/pre>\n<p><\/code><br \/>\nBu komut ise, e\u015flemeyi sadece ana makinenin <code>127.0.0.1<\/code> (localhost) IP adresine ba\u011flar, b\u00f6ylece d\u0131\u015far\u0131dan eri\u015fim engellenmi\u015f olur.<\/p>\n<h4>Yanl\u0131\u015f Anlaman\u0131n K\u00f6kenleri<\/h4>\n<p>Yanl\u0131\u015f anlama genellikle, <code>EXPOSE<\/code> komutunun portu \"a\u00e7t\u0131\u011f\u0131\" veya \"yay\u0131nlad\u0131\u011f\u0131\" yan\u0131lg\u0131s\u0131ndan kaynaklan\u0131r. Oysa <code>EXPOSE<\/code> sadece bir deklarasyondur; ger\u00e7ek yay\u0131nlama i\u015flemi <code>-p<\/code> flag'i ile yap\u0131l\u0131r. Bu fark\u0131 g\u00f6z ard\u0131 etmek, ya uygulamaya eri\u015fememek ya da istemeden d\u0131\u015f d\u00fcnyaya a\u00e7\u0131k hale getirmek gibi sonu\u00e7lar do\u011furabilir.<\/p>\n<h3>Benim Yapt\u0131\u011f\u0131m Hata: Senaryo ve Sonu\u00e7lar\u0131<\/h3>\n<p>Geli\u015ftirme ortam\u0131nda her \u015fey yolunda giderken, \u00fcretim ortam\u0131na ge\u00e7i\u015fte basit bir port yap\u0131land\u0131rma hatas\u0131, beni ve ekibimi zor durumda b\u0131rakt\u0131. \u0130\u015fte hatam\u0131n detaylar\u0131 ve yol a\u00e7t\u0131\u011f\u0131 sonu\u00e7lar.<\/p>\n<h4>Hatan\u0131n Ortaya \u00c7\u0131k\u0131\u015f\u0131 ve Geli\u015fimi<\/h4>\n<p>Bir mikroservis tabanl\u0131 uygulama geli\u015ftiriyorduk. Servislerden biri, bir API gateway g\u00f6revi g\u00f6r\u00fcyordu ve d\u0131\u015f d\u00fcnyadan gelen istekleri al\u0131p ilgili mikroservislere y\u00f6nlendiriyordu. <code>Dockerfile<\/code>'\u0131nda <code>EXPOSE 8080<\/code> tan\u0131ml\u0131yd\u0131. Geli\u015ftirme ortam\u0131nda, bu servisi test ederken genellikle <code>docker run -p 8080:8080<\/code> \u015feklinde \u00e7al\u0131\u015ft\u0131r\u0131yorduk ve her \u015fey sorunsuzdu.<\/p>\n<p>\u00dcretim ortam\u0131na ge\u00e7i\u015fte, \"g\u00fcvenlik\" kayg\u0131s\u0131yla ve <code>-p<\/code> flag'inin gereksiz oldu\u011funu d\u00fc\u015f\u00fcnerek, sadece <code>EXPOSE<\/code> komutunun yeterli olaca\u011f\u0131na inand\u0131m. \u00c7\u00fcnk\u00fc <code>EXPOSE<\/code> kelimesi \"ortaya \u00e7\u0131karmak\" anlam\u0131na geliyordu ve ben de bunun portu d\u0131\u015f d\u00fcnyaya a\u00e7t\u0131\u011f\u0131n\u0131 san\u0131yordum.<\/p>\n<p><code>docker-compose.yml<\/code> dosyas\u0131nda servisi \u015fu \u015fekilde tan\u0131mlad\u0131m:<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\nservices:\n  api-gateway:\n    image: my-api-gateway:latest\n    # EXPOSE 8080 Dockerfile'da tan\u0131ml\u0131yd\u0131, burada tekrar belirtmedim.\n    # Ve en \u00f6nemlisi, ports: b\u00f6l\u00fcm\u00fcn\u00fc eklemedim!\n    environment:\n      - ENV=production\n<\/pre>\n<p><\/code><br \/>\nUygulamay\u0131 da\u011f\u0131tt\u0131k ve her \u015feyin \u00e7al\u0131\u015fmas\u0131n\u0131 bekledik. Ancak d\u0131\u015far\u0131dan API gateway'e eri\u015fim sa\u011flayam\u0131yorduk. \u0130\u00e7erideki di\u011fer servisler birbiriyle konu\u015fabiliyordu ama d\u0131\u015f d\u00fcnyadan gelen istekler API gateway'e ula\u015fm\u0131yordu.<\/p>\n<h4>G\u00fcvenlik Riskleri ve Performans Etkileri<\/h4>\n<p>Neyse ki, benim hatam do\u011frudan bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131na yol a\u00e7mad\u0131 \u00e7\u00fcnk\u00fc portu d\u0131\u015far\u0131ya *hi\u00e7 a\u00e7mam\u0131\u015ft\u0131m*. Ancak bu, hatan\u0131n ba\u015fka bir versiyonunun ne kadar tehlikeli olabilece\u011fini g\u00f6steriyor. E\u011fer <code>EXPOSE<\/code> komutunun portu d\u0131\u015far\u0131ya a\u00e7t\u0131\u011f\u0131na inan\u0131p, <code>-p<\/code> flag'i ile yanl\u0131\u015f bir portu veya t\u00fcm aray\u00fczleri a\u00e7sayd\u0131m (\u00f6rne\u011fin, 0.0.0.0 ile), bu ciddi bir g\u00fcvenlik riski olu\u015fturabilirdi.<\/p>\n<p>Benim durumumda, portun d\u0131\u015far\u0131ya a\u00e7\u0131lmamas\u0131 nedeniyle bir g\u00fcvenlik riski olu\u015fmad\u0131, ancak uygulaman\u0131n temel i\u015flevselli\u011fi aksad\u0131. Performans etkisi do\u011frudan yoktu, ancak eri\u015fim sorunlar\u0131 nedeniyle i\u015f s\u00fcre\u00e7leri durdu ve bu da dolayl\u0131 olarak zaman ve kaynak kayb\u0131na yol a\u00e7t\u0131.<\/p>\n<h4>\u00dcretim Ortam\u0131ndaki Somut Sonu\u00e7lar<\/h4>\n<p>Uygulaman\u0131n d\u0131\u015f d\u00fcnyaya kapal\u0131 olmas\u0131, m\u00fc\u015fteri taraf\u0131nda hizmet kesintisine neden oldu. Acil bir durum ilan edildi ve sorunu tespit etmek i\u00e7in uzun s\u00fcreli bir hata ay\u0131klama s\u00fcreci ba\u015flad\u0131. \u0130lk ba\u015fta a\u011f yap\u0131land\u0131rmalar\u0131n\u0131, g\u00fcvenlik duvarlar\u0131n\u0131 ve DNS ayarlar\u0131n\u0131 kontrol ettik. En son, Docker Compose dosyas\u0131ndaki port yap\u0131land\u0131rmas\u0131n\u0131 inceledi\u011fimizde, <code>-p<\/code> e\u015fde\u011feri olan <code>ports<\/code> b\u00f6l\u00fcm\u00fcn\u00fcn tamamen eksik oldu\u011funu fark ettik.<\/p>\n<p>Hatam\u0131 d\u00fczelttim ve <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 a\u015fa\u011f\u0131daki gibi g\u00fcncelledim:<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\nservices:\n  api-gateway:\n    image: my-api-gateway:latest\n    ports:\n      - \"80:8080\" # Ana makinenin 80 portunu, kapsay\u0131c\u0131n\u0131n 8080 portuna e\u015fle\n    environment:\n      - ENV=production\n<\/pre>\n<p><\/code><br \/>\nBu de\u011fi\u015fikli\u011fi yapt\u0131ktan sonra, uygulama sorunsuz bir \u015fekilde \u00e7al\u0131\u015fmaya ba\u015flad\u0131. Bu deneyim, Docker port y\u00f6netiminin ne kadar kritik oldu\u011funu ve her bir komutun tam olarak ne anlama geldi\u011fini anlaman\u0131n \u00f6nemini ac\u0131 bir \u015fekilde g\u00f6sterdi.<\/p>\n<h3>G\u00fcvenlik A\u00e7\u0131s\u0131ndan Port Y\u00f6netimi<\/h3>\n<p>Portlar\u0131n do\u011fru bir \u015fekilde y\u00f6netilmesi, Docker ortamlar\u0131n\u0131n g\u00fcvenli\u011fi i\u00e7in hayati \u00f6neme sahiptir. Yanl\u0131\u015f yap\u0131land\u0131r\u0131lm\u0131\u015f portlar, yetkisiz eri\u015fime, veri ihlallerine ve di\u011fer g\u00fcvenlik zafiyetlerine davetiye \u00e7\u0131karabilir.<\/p>\n<h4>En Az Ayr\u0131cal\u0131k Prensibi<\/h4>\n<p>G\u00fcvenlikte \"en az ayr\u0131cal\u0131k\" prensibi, bir servisin veya kullan\u0131c\u0131n\u0131n sadece g\u00f6revini yerine getirmesi i\u00e7in gerekli olan minimum yetkilere sahip olmas\u0131 gerekti\u011fini belirtir. Docker portlar\u0131 i\u00e7in bu, sadece ger\u00e7ekten ihtiya\u00e7 duyulan portlar\u0131n d\u0131\u015f d\u00fcnyaya a\u00e7\u0131lmas\u0131 anlam\u0131na gelir. Herhangi bir servisin gereksiz yere a\u00e7\u0131k b\u0131rak\u0131lan bir portu, potansiyel bir sald\u0131r\u0131 y\u00fczeyi olu\u015fturur.<\/p>\n<h4>G\u00fcvenlik Duvarlar\u0131 ve A\u011f Segmentasyonu<\/h4>\n<p>Docker kapsay\u0131c\u0131lar\u0131n\u0131n \u00f6n\u00fcnde mutlaka bir g\u00fcvenlik duvar\u0131 (firewall) olmal\u0131d\u0131r. Bu g\u00fcvenlik duvar\u0131, sadece belirli IP adreslerinden veya belirli portlardan gelen trafi\u011fe izin vermelidir. Ayr\u0131ca, a\u011f segmentasyonu kullanarak, farkl\u0131 g\u00fcvenlik seviyelerine sahip servisleri ayr\u0131 a\u011flara ay\u0131rmak, bir g\u00fcvenlik ihlali durumunda yay\u0131l\u0131m\u0131 s\u0131n\u0131rlamaya yard\u0131mc\u0131 olur. \u00d6rne\u011fin, veritaban\u0131 servisleri sadece uygulama servislerinin eri\u015febilece\u011fi \u00f6zel bir a\u011fda \u00e7al\u0131\u015ft\u0131r\u0131lmal\u0131d\u0131r.<\/p>\n<h4>Sald\u0131r\u0131 Y\u00fczeyini Azaltma<\/h4>\n<p>Sald\u0131r\u0131 y\u00fczeyini azaltmak, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n say\u0131s\u0131n\u0131 ve kapsam\u0131n\u0131 d\u00fc\u015f\u00fcrmek demektir. Docker port y\u00f6netimi a\u00e7\u0131s\u0131ndan bu \u015funlar\u0131 i\u00e7erir:<\/p>\n<ul>\n<li>Sadece gerekli portlar\u0131 yay\u0131nlay\u0131n.<\/li>\n<li>M\u00fcmk\u00fcnse, portlar\u0131 sadece <code>127.0.0.1<\/code> (localhost) gibi belirli IP adreslerine ba\u011flay\u0131n.<\/li>\n<li>Varsay\u0131lan portlar\u0131 kullanmaktan ka\u00e7\u0131n\u0131n veya en az\u0131ndan g\u00fcvenlik duvar\u0131 ile koruyun.<\/li>\n<li>Kapsay\u0131c\u0131lar\u0131n birbirleriyle ileti\u015fim kurmas\u0131 gerekiyorsa, bunu Docker'\u0131n i\u00e7 a\u011f mekanizmalar\u0131 \u00fczerinden yap\u0131n ve d\u0131\u015far\u0131ya port yay\u0131nlamaktan ka\u00e7\u0131n\u0131n.<\/li>\n<\/ul>\n<h3>Do\u011fru Yakla\u015f\u0131m: En \u0130yi Uygulamalar<\/h3>\n<p>Bu hatadan \u00e7\u0131kard\u0131\u011f\u0131m dersler ve sekt\u00f6rdeki en iyi uygulamalar \u0131\u015f\u0131\u011f\u0131nda, Docker port y\u00f6netimini do\u011fru bir \u015fekilde ele almak i\u00e7in izlenmesi gereken ad\u0131mlar\u0131 a\u015fa\u011f\u0131da bulabilirsiniz.<\/p>\n<h4><code>EXPOSE<\/code> Kullan\u0131m\u0131n\u0131n Amac\u0131<\/h4>\n<p><code>EXPOSE<\/code> talimat\u0131n\u0131, sadece kapsay\u0131c\u0131n\u0131n i\u00e7indeki uygulaman\u0131n hangi portlar\u0131 dinledi\u011fini <strong>belirtmek<\/strong> ve <strong>belgelemek<\/strong> i\u00e7in kullan\u0131n. Bu, kapsay\u0131c\u0131 imaj\u0131n\u0131 kullanan di\u011fer geli\u015ftiricilere veya Docker Compose gibi ara\u00e7lara bir ipucu sa\u011flar. Kesinlikle portu d\u0131\u015f d\u00fcnyaya a\u00e7t\u0131\u011f\u0131n\u0131 varsaymay\u0131n.<\/p>\n<h4><code>-p<\/code> Kullan\u0131m\u0131nda Dikkat Edilmesi Gerekenler<\/h4>\n<p>Portlar\u0131 d\u0131\u015f d\u00fcnyaya a\u00e7mak i\u00e7in her zaman <code>-p<\/code> (veya Docker Compose'da <code>ports<\/code>) flag'ini kullan\u0131n.<\/p>\n<ul>\n<li><strong>Belirli Bir IP'ye Ba\u011flama:<\/strong> M\u00fcmk\u00fcnse, portu sadece belirli bir IP adresine ba\u011flay\u0131n. \u00d6rne\u011fin, <code>docker run -p 127.0.0.1:8080:80<\/code> komutu, portu sadece localhost'a a\u00e7ar ve d\u0131\u015far\u0131dan eri\u015fimi engeller.<\/li>\n<li><strong>Do\u011fru Port E\u015flemesi:<\/strong> Ana makine portu ile kapsay\u0131c\u0131 portunu do\u011fru e\u015fle\u015ftirdi\u011finizden emin olun (<code>HOST_PORT:CONTAINER_PORT<\/code>).<\/li>\n<li><strong>Rastgele Portlardan Ka\u00e7\u0131nma:<\/strong> <code>docker run -P<\/code> (b\u00fcy\u00fck P) kullanarak rastgele ana makine portlar\u0131na e\u015flemek yerine, <code>-p<\/code> ile belirli portlar\u0131 kullan\u0131n. Rastgele portlar, \u00fcretim ortam\u0131nda y\u00f6netimi zorla\u015ft\u0131rabilir.<\/li>\n<\/ul>\n<h4>Docker Compose ile Port Y\u00f6netimi<\/h4>\n<p>Docker Compose kullan\u0131rken, <code>ports<\/code> anahtar\u0131n\u0131 kullanarak port e\u015flemesini a\u00e7\u0131k\u00e7a belirtin. Bu, yap\u0131land\u0131rman\u0131n daha okunabilir ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\nservices:\n  web-app:\n    image: my-web-app:latest\n    ports:\n      - \"80:80\" # Ana makine 80 -> Kapsay\u0131c\u0131 80\n      - \"443:443\" # Ana makine 443 -> Kapsay\u0131c\u0131 443\n    networks:\n      - app-network\n\n  database:\n    image: postgres:13\n    environment:\n      POSTGRES_DB: mydb\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n    # Veritaban\u0131 sadece web-app taraf\u0131ndan eri\u015filece\u011fi i\u00e7in d\u0131\u015far\u0131ya port a\u00e7m\u0131yoruz.\n    networks:\n      - app-network\n\nnetworks:\n  app-network:\n    driver: bridge\n<\/pre>\n<p><\/code><br \/>\nYukar\u0131daki \u00f6rnekte, <code>web-app<\/code> servisi d\u0131\u015f d\u00fcnyaya 80 ve 443 portlar\u0131ndan eri\u015filebilirken, <code>database<\/code> servisi sadece <code>app-network<\/code> i\u00e7indeki di\u011fer servisler taraf\u0131ndan eri\u015filebilir.<\/p>\n<h4>G\u00fcvenli Konfig\u00fcrasyon \u00d6rnekleri<\/h4>\n<table class=\"table\">\n<thead>\n<tr>\n<th>Senaryo<\/th>\n<th><code>Dockerfile<\/code><\/th>\n<th><code>docker run<\/code> Komutu<\/th>\n<th><code>docker-compose.yml<\/code> \u00d6rne\u011fi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>D\u0131\u015f d\u00fcnyaya a\u00e7\u0131k web sunucusu<\/td>\n<td><code>EXPOSE 80<\/code><\/td>\n<td><code>docker run -p 80:80 my-web-app<\/code><\/td>\n<td><code>ports:<br \/>\u00a0\u00a0- \"80:80\"<\/code><\/td>\n<\/tr>\n<tr>\n<td>Sadece localhost'a a\u00e7\u0131k API servisi<\/td>\n<td><code>EXPOSE 3000<\/code><\/td>\n<td><code>docker run -p 127.0.0.1:3000:3000 my-api<\/code><\/td>\n<td><code>ports:<br \/>\u00a0\u00a0- \"127.0.0.1:3000:3000\"<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0130\u00e7 a\u011fda \u00e7al\u0131\u015fan veritaban\u0131<\/td>\n<td><code>EXPOSE 5432<\/code><\/td>\n<td><code>docker run --network my-app-net my-db<\/code><\/td>\n<td><code># ports b\u00f6l\u00fcm\u00fc yok<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Hatadan \u00c7\u0131kar\u0131lan Dersler ve Kontrol Listesi<\/h3>\n<p>Bu deneyim, sadece teknik bir hata olman\u0131n \u00f6tesinde, s\u00fcre\u00e7 ve bilgi y\u00f6netimi a\u00e7\u0131s\u0131ndan da \u00f6nemli dersler \u00e7\u0131karmam\u0131 sa\u011flad\u0131. Her geli\u015ftiricinin ve DevOps m\u00fchendisinin bu t\u00fcr hatalardan ka\u00e7\u0131nmak i\u00e7in dikkat etmesi gereken noktalar vard\u0131r.<\/p>\n<h4>Her Zaman Dok\u00fcmantasyonu Kontrol Edin<\/h4>\n<p>Bir teknoloji veya arac\u0131n belirli bir \u00f6zelli\u011fini kullanmadan \u00f6nce, resmi dok\u00fcmantasyonu dikkatlice okuyun. <code>EXPOSE<\/code> ve <code>-p<\/code> aras\u0131ndaki fark gibi temel konular, dok\u00fcmantasyonda a\u00e7\u0131k\u00e7a belirtilmi\u015ftir. Varsay\u0131mlarda bulunmak yerine, bilgiye dayal\u0131 kararlar al\u0131n.<\/p>\n<h4>Test Ortam\u0131nda Kapsaml\u0131 Deneyler Yap\u0131n<\/h4>\n<p>\u00dcretim ortam\u0131na ge\u00e7meden \u00f6nce, t\u00fcm a\u011f yap\u0131land\u0131rmalar\u0131n\u0131 ve port e\u015flemelerini test ortam\u0131nda kapsaml\u0131 bir \u015fekilde deneyin. Farkl\u0131 senaryolar\u0131 sim\u00fcle edin:<\/p>\n<ul>\n<li>Uygulamaya d\u0131\u015far\u0131dan eri\u015filebiliyor mu?<\/li>\n<li>Sadece belirlenen portlardan m\u0131 eri\u015filebiliyor?<\/li>\n<li>\u0130\u00e7 a\u011fdaki servisler birbirleriyle konu\u015fabiliyor mu?<\/li>\n<li>G\u00fcvenlik duvar\u0131 kurallar\u0131 do\u011fru \u00e7al\u0131\u015f\u0131yor mu?<\/li>\n<\/ul>\n<h4>G\u00fcvenlik Denetimlerini \u0130hmal Etmeyin<\/h4>\n<p>Periyodik g\u00fcvenlik denetimleri ve s\u0131zma testleri, potansiyel port a\u00e7\u0131kl\u0131klar\u0131n\u0131 ve di\u011fer g\u00fcvenlik zafiyetlerini tespit etmede kritik rol oynar. G\u00fcvenlik ekipleri veya ara\u00e7lar\u0131 kullanarak, yay\u0131nlanan portlar\u0131n amac\u0131na uygun olup olmad\u0131\u011f\u0131n\u0131 kontrol edin.<\/p>\n<h4>Port Y\u00f6netimi Kontrol Listesi<\/h4>\n<ol>\n<li><strong>Gereklilik Analizi:<\/strong> Hangi portlar\u0131n ger\u00e7ekten d\u0131\u015f d\u00fcnyaya a\u00e7\u0131lmas\u0131 gerekti\u011fini belirleyin. En az ayr\u0131cal\u0131k prensibini uygulay\u0131n.<\/li>\n<li><strong><code>Dockerfile<\/code> <code>EXPOSE<\/code>:<\/strong> Sadece bilgilendirme ama\u00e7l\u0131 olarak, kapsay\u0131c\u0131 i\u00e7inde dinlenen portlar\u0131 <code>EXPOSE<\/code> ile belirtin.<\/li>\n<li><strong><code>docker run<\/code> \/ <code>docker-compose.yml<\/code> <code>ports<\/code>:<\/strong> Portlar\u0131 d\u0131\u015f d\u00fcnyaya a\u00e7mak i\u00e7in <code>-p<\/code> flag'ini veya <code>ports<\/code> anahtar\u0131n\u0131 kullan\u0131n.<\/li>\n<li><strong>IP Ba\u011flama:<\/strong> M\u00fcmk\u00fcnse, portlar\u0131 belirli IP adreslerine ba\u011flayarak sald\u0131r\u0131 y\u00fczeyini azalt\u0131n (\u00f6rne\u011fin, <code>127.0.0.1<\/code>).<\/li>\n<li><strong>G\u00fcvenlik Duvar\u0131:<\/strong> Ana makine ve\/veya bulut g\u00fcvenlik duvar\u0131 kurallar\u0131n\u0131, sadece gerekli portlara izin verecek \u015fekilde yap\u0131land\u0131r\u0131n.<\/li>\n<li><strong>A\u011f Segmentasyonu:<\/strong> Farkl\u0131 g\u00fcvenlik seviyelerine sahip servisleri ayr\u0131 Docker a\u011flar\u0131na ay\u0131r\u0131n.<\/li>\n<li><strong>Dok\u00fcmantasyon:<\/strong> Port yap\u0131land\u0131rmalar\u0131n\u0131 ve bunlar\u0131n nedenlerini proje dok\u00fcmantasyonunda a\u00e7\u0131k\u00e7a belirtin.<\/li>\n<li><strong>Test:<\/strong> Her da\u011f\u0131t\u0131mdan \u00f6nce port eri\u015fimini ve a\u011f ileti\u015fimini test edin.<\/li>\n<\/ol>\n<h3>Sonu\u00e7<\/h3>\n<p>Docker port y\u00f6netimi, basit gibi g\u00f6r\u00fcnse de, \u00fcretim ortam\u0131nda ciddi sonu\u00e7lar do\u011furabilecek inceliklere sahiptir. <code>EXPOSE<\/code> talimat\u0131 ile <code>-p<\/code> (publish) flag'i aras\u0131ndaki fark\u0131 tam olarak anlamamak, benim ya\u015fad\u0131\u011f\u0131m gibi eri\u015fim sorunlar\u0131na veya daha k\u00f6t\u00fcs\u00fc, istemeden a\u00e7\u0131lan g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir. Bu deneyim, bana ve ekibime, Docker'\u0131n temel a\u011f mekanizmalar\u0131n\u0131 derinlemesine anlaman\u0131n, dok\u00fcmantasyonu okuman\u0131n ve kapsaml\u0131 testler yapman\u0131n ne kadar \u00f6nemli oldu\u011funu \u00f6\u011fretti. Her zaman en az ayr\u0131cal\u0131k prensibini benimseyin, g\u00fcvenlik duvarlar\u0131n\u0131 do\u011fru yap\u0131land\u0131r\u0131n ve portlar\u0131n\u0131z\u0131 bilin\u00e7li bir \u015fekilde y\u00f6netin. Bu sayede, \u00fcretim ortam\u0131nda beklenmedik s\u00fcrprizlerle kar\u015f\u0131la\u015fma riskinizi minimize edersiniz.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>1. <code>EXPOSE<\/code> komutu neden hala kullan\u0131l\u0131yor madem portu a\u00e7m\u0131yor?<\/h4>\n<p><code>EXPOSE<\/code> komutu, kapsay\u0131c\u0131y\u0131 kullanan di\u011fer geli\u015ftiricilere veya ara\u00e7lara (Docker Compose, Docker Swarm) uygulaman\u0131n hangi portlar\u0131 dinledi\u011fi hakk\u0131nda bilgi vermek i\u00e7in bir meta veri olarak kullan\u0131l\u0131r. Bu, kapsay\u0131c\u0131 imaj\u0131n\u0131n belgelendirilmesine yard\u0131mc\u0131 olur ve otomatik port e\u015flemeleri (\u00f6rne\u011fin, <code>docker run -P<\/code> ile) i\u00e7in bir ipucu sa\u011flar.<\/p>\n<h4>2. Docker'da bir portu sadece belirli bir IP adresine nas\u0131l a\u00e7abilirim?<\/h4>\n<p><code>docker run<\/code> komutunda <code>-p<\/code> flag'ini kullan\u0131rken, ana makine IP adresini belirtebilirsiniz. \u00d6rne\u011fin, <code>docker run -p 127.0.0.1:8080:80 my-app<\/code> komutu, kapsay\u0131c\u0131n\u0131n 80 numaral\u0131 portunu sadece ana makinenin localhost (127.0.0.1) adresindeki 8080 portuna e\u015fler.<\/p>\n<h4>3. Docker Compose kullan\u0131rken <code>ports<\/code> ve <code>expose<\/code> anahtarlar\u0131 aras\u0131ndaki fark nedir?<\/h4>\n<p><code>ports<\/code> anahtar\u0131, <code>docker run -p<\/code> ile ayn\u0131 i\u015flevi g\u00f6r\u00fcr; yani kapsay\u0131c\u0131daki bir portu ana makinedeki bir porta e\u015fler ve d\u0131\u015f d\u00fcnyaya a\u00e7ar. <code>expose<\/code> anahtar\u0131 ise, sadece Docker Compose a\u011f\u0131ndaki di\u011fer servislerin bu porta eri\u015febilece\u011fini belirtir, ancak ana makineye veya d\u0131\u015f d\u00fcnyaya portu yay\u0131nlamaz. Bu, <code>Dockerfile<\/code>'daki <code>EXPOSE<\/code> talimat\u0131n\u0131n Compose d\u00fczeyindeki kar\u015f\u0131l\u0131\u011f\u0131d\u0131r.<\/p>\n<h4>4. Bir kapsay\u0131c\u0131 i\u00e7indeki uygulaman\u0131n dinledi\u011fi portu nas\u0131l \u00f6\u011frenebilirim?<\/h4>\n<p>\u0130lk olarak, <code>Dockerfile<\/code>'\u0131n\u0131 inceleyerek <code>EXPOSE<\/code> komutuna bakabilirsiniz. E\u011fer bu bilgi yoksa, kapsay\u0131c\u0131y\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra <code>docker inspect <container_id><\/code> komutunu kullanarak a\u011f yap\u0131land\u0131rmas\u0131n\u0131 ve port bilgilerini kontrol edebilirsiniz. Ayr\u0131ca, kapsay\u0131c\u0131 i\u00e7ine girip (\u00f6rne\u011fin, <code>docker exec -it <container_id> bash<\/code>) <code>netstat -tuln<\/code> gibi komutlarla dinlenen portlar\u0131 g\u00f6rebilirsiniz.<\/p>\n<h4>5. \u00dcretim ortam\u0131nda hangi portlar\u0131 a\u00e7maktan ka\u00e7\u0131nmal\u0131y\u0131m?<\/h4>\n<p>Genel olarak, sadece uygulaman\u0131z\u0131n d\u0131\u015f d\u00fcnyadan eri\u015fmesi gereken portlar\u0131 a\u00e7mal\u0131s\u0131n\u0131z (\u00f6rne\u011fin, HTTP\/HTTPS i\u00e7in 80\/443). Veritaban\u0131 portlar\u0131 (PostgreSQL i\u00e7in 5432, MySQL i\u00e7in 3306), Redis portlar\u0131 (6379) gibi hassas servislerin portlar\u0131n\u0131 asla do\u011frudan d\u0131\u015f d\u00fcnyaya a\u00e7mamal\u0131s\u0131n\u0131z. Bu t\u00fcr servisler sadece uygulama kapsay\u0131c\u0131lar\u0131 taraf\u0131ndan eri\u015filebilir olmal\u0131 ve kendi \u00f6zel Docker a\u011flar\u0131nda \u00e7al\u0131\u015fmal\u0131d\u0131r.<\/p>\n","protected":false},"excerpt":{"rendered":"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim\nDocker, modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinin vazge\u00e7il&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1407],"tags":[],"class_list":{"0":"post-39449","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-docker","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim\" \/>\n<meta property=\"og:description\" content=\"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim Docker, modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinin vazge\u00e7il...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-21T14:30:39+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim\",\"datePublished\":\"2026-02-21T14:30:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/\"},\"wordCount\":2771,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Docker\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/\",\"name\":\"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-21T14:30:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim","og_description":"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim Docker, modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinin vazge\u00e7il...","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-21T14:30:39+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim","datePublished":"2026-02-21T14:30:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/"},"wordCount":2771,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Docker"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/","name":"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-21T14:30:39+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-port-acikligi-uretim-ortamindaki-gercek-hatam-ve-ogrendiklerim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Port A\u00e7\u0131kl\u0131\u011f\u0131: \u00dcretim Ortam\u0131ndaki Ger\u00e7ek Hatam ve \u00d6\u011frendiklerim"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39449","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39449"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39449\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39449"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39449"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}