[{"data":1,"prerenderedAt":747},["ShallowReactive",2],{"content-query-fCXE6PRgtc":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"layout":10,"crumb":11,"summary":12,"group":13,"order":14,"port":15,"updated":16,"cta":17,"related":25,"faq":44,"body":57,"_type":740,"_id":741,"_source":742,"_file":743,"_stem":744,"_extension":745,"sitemap":746},"/localhost/9000","localhost",false,"","localhost:9000: PHP-FPM, SonarQube, MinIO and Portainer port","localhost:9000 is the default port for PHP-FPM, SonarQube, the MinIO S3 API and legacy Portainer. Find out what's on port 9000, fix errors and free it.","reference","localhost:9000","PHP-FPM, SonarQube, MinIO API, Portainer (legacy), ClickHouse.","Web frameworks",9,9000,"2026-10-28",{"eyebrow":18,"title":19,"text":20,"to":21,"label":22,"secondaryTo":23,"secondaryLabel":24},"Webhook Bin","See what SonarQube or MinIO webhooks send","SonarQube posts quality gate results and MinIO posts bucket events as webhooks. Point either at a free Webhook Bin URL to capture the exact payload and headers, no signup. When you're ready, relay forward delivers them to a handler on localhost.","/webhook-bin/","Open Webhook Bin","/docs/webhooks/internal/localhost/","Receive webhooks locally",[26,29,32,35,38,41],{"title":27,"to":28},"localhost:8000","/localhost/8000/",{"title":30,"to":31},"localhost:8080","/localhost/8080/",{"title":33,"to":34},"localhost:5432 (PostgreSQL)","/localhost/5432/",{"title":36,"to":37},"502 Bad Gateway","/http-errors/502-bad-gateway/",{"title":39,"to":40},"What is a reverse proxy?","/glossary/reverse-proxy/",{"title":42,"to":43},"What is a webhook payload?","/glossary/webhook-payload/",[45,48,51,54],{"q":46,"a":47},"What is localhost:9000?","localhost:9000 is port 9000 on your own machine. It is the default port for PHP-FPM, the SonarQube web server, the MinIO S3 API, Graylog, the native protocol of ClickHouse and older Portainer installs. Which one you have depends on what you installed or started in Docker.",{"q":49,"a":50},"Why does localhost:9000 show nothing or an empty response in my browser?","If PHP-FPM or ClickHouse is on port 9000, the port does not speak HTTP. PHP-FPM uses FastCGI and expects a web server such as Nginx in front of it. Open the Nginx or Apache port instead, usually 80 or 8080.",{"q":52,"a":53},"What is MinIO port 9000 vs 9001?","MinIO serves the S3-compatible API on port 9000 and the web console on the port set by --console-address, conventionally 9001. Browse to 9001 for the UI and point S3 clients at 9000.",{"q":55,"a":56},"Why did Xdebug move from port 9000 to 9003?","Xdebug 2 used 9000, which clashed with PHP-FPM on the same machine. Xdebug 3 changed the default client port to 9003, so set your IDE to listen on 9003.",{"type":58,"children":59,"toc":733},"root",[60,80,87,225,230,298,323,329,376,418,443,453,463,469,518,532,537,609,615,644,650,655,676,687,722,727],{"type":61,"tag":62,"props":63,"children":64},"element","p",{},[65,78],{"type":61,"tag":66,"props":67,"children":68},"strong",{},[69,76],{"type":61,"tag":70,"props":71,"children":73},"code",{"className":72},[],[74],{"type":75,"value":11},"text",{"type":75,"value":77}," is port 9000 on your own computer, and several unrelated tools default to it: PHP-FPM, SonarQube, the MinIO S3 API, Graylog, ClickHouse's native protocol and older Portainer installs.",{"type":75,"value":79}," The first job is finding out which one you're actually talking to, because some of them don't speak HTTP at all. That's why a browser can show an empty response or a download instead of a page.",{"type":61,"tag":81,"props":82,"children":84},"h2",{"id":83},"what-runs-on-port-9000",[85],{"type":75,"value":86},"What runs on port 9000",{"type":61,"tag":88,"props":89,"children":90},"table",{},[91,115],{"type":61,"tag":92,"props":93,"children":94},"thead",{},[95],{"type":61,"tag":96,"props":97,"children":98},"tr",{},[99,105,110],{"type":61,"tag":100,"props":101,"children":102},"th",{},[103],{"type":75,"value":104},"Tool",{"type":61,"tag":100,"props":106,"children":107},{},[108],{"type":75,"value":109},"What 9000 is",{"type":61,"tag":100,"props":111,"children":112},{},[113],{"type":75,"value":114},"Open in a browser?",{"type":61,"tag":116,"props":117,"children":118},"tbody",{},[119,138,156,174,191,207],{"type":61,"tag":96,"props":120,"children":121},{},[122,128,133],{"type":61,"tag":123,"props":124,"children":125},"td",{},[126],{"type":75,"value":127},"PHP-FPM",{"type":61,"tag":123,"props":129,"children":130},{},[131],{"type":75,"value":132},"FastCGI listener behind Nginx/Apache",{"type":61,"tag":123,"props":134,"children":135},{},[136],{"type":75,"value":137},"No, FastCGI not HTTP",{"type":61,"tag":96,"props":139,"children":140},{},[141,146,151],{"type":61,"tag":123,"props":142,"children":143},{},[144],{"type":75,"value":145},"SonarQube",{"type":61,"tag":123,"props":147,"children":148},{},[149],{"type":75,"value":150},"Web UI and API",{"type":61,"tag":123,"props":152,"children":153},{},[154],{"type":75,"value":155},"Yes",{"type":61,"tag":96,"props":157,"children":158},{},[159,164,169],{"type":61,"tag":123,"props":160,"children":161},{},[162],{"type":75,"value":163},"MinIO",{"type":61,"tag":123,"props":165,"children":166},{},[167],{"type":75,"value":168},"S3-compatible API (console usually 9001)",{"type":61,"tag":123,"props":170,"children":171},{},[172],{"type":75,"value":173},"API only",{"type":61,"tag":96,"props":175,"children":176},{},[177,182,187],{"type":61,"tag":123,"props":178,"children":179},{},[180],{"type":75,"value":181},"Portainer",{"type":61,"tag":123,"props":183,"children":184},{},[185],{"type":75,"value":186},"HTTP UI in older setups (HTTPS 9443 is the current default)",{"type":61,"tag":123,"props":188,"children":189},{},[190],{"type":75,"value":155},{"type":61,"tag":96,"props":192,"children":193},{},[194,199,203],{"type":61,"tag":123,"props":195,"children":196},{},[197],{"type":75,"value":198},"Graylog",{"type":61,"tag":123,"props":200,"children":201},{},[202],{"type":75,"value":150},{"type":61,"tag":123,"props":204,"children":205},{},[206],{"type":75,"value":155},{"type":61,"tag":96,"props":208,"children":209},{},[210,215,220],{"type":61,"tag":123,"props":211,"children":212},{},[213],{"type":75,"value":214},"ClickHouse",{"type":61,"tag":123,"props":216,"children":217},{},[218],{"type":75,"value":219},"Native TCP protocol (HTTP is 8123)",{"type":61,"tag":123,"props":221,"children":222},{},[223],{"type":75,"value":224},"No",{"type":61,"tag":62,"props":226,"children":227},{},[228],{"type":75,"value":229},"Find the owner first:",{"type":61,"tag":231,"props":232,"children":236},"pre",{"className":233,"code":234,"language":235,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark","# macOS / Linux\nlsof -i :9000\ndocker ps --filter \"publish=9000\"\n","bash",[237],{"type":61,"tag":70,"props":238,"children":239},{"__ignoreMap":7},[240,252,274],{"type":61,"tag":241,"props":242,"children":245},"span",{"class":243,"line":244},"line",1,[246],{"type":61,"tag":241,"props":247,"children":249},{"style":248},"--shiki-default:#6A737D",[250],{"type":75,"value":251},"# macOS / Linux\n",{"type":61,"tag":241,"props":253,"children":255},{"class":243,"line":254},2,[256,262,268],{"type":61,"tag":241,"props":257,"children":259},{"style":258},"--shiki-default:#B392F0",[260],{"type":75,"value":261},"lsof",{"type":61,"tag":241,"props":263,"children":265},{"style":264},"--shiki-default:#79B8FF",[266],{"type":75,"value":267}," -i",{"type":61,"tag":241,"props":269,"children":271},{"style":270},"--shiki-default:#9ECBFF",[272],{"type":75,"value":273}," :9000\n",{"type":61,"tag":241,"props":275,"children":277},{"class":243,"line":276},3,[278,283,288,293],{"type":61,"tag":241,"props":279,"children":280},{"style":258},[281],{"type":75,"value":282},"docker",{"type":61,"tag":241,"props":284,"children":285},{"style":270},[286],{"type":75,"value":287}," ps",{"type":61,"tag":241,"props":289,"children":290},{"style":264},[291],{"type":75,"value":292}," --filter",{"type":61,"tag":241,"props":294,"children":295},{"style":270},[296],{"type":75,"value":297}," \"publish=9000\"\n",{"type":61,"tag":231,"props":299,"children":303},{"className":300,"code":301,"language":302,"meta":7,"style":7},"language-powershell shiki shiki-themes github-dark","# Windows\nnetstat -ano | findstr :9000\n","powershell",[304],{"type":61,"tag":70,"props":305,"children":306},{"__ignoreMap":7},[307,315],{"type":61,"tag":241,"props":308,"children":309},{"class":243,"line":244},[310],{"type":61,"tag":241,"props":311,"children":312},{},[313],{"type":75,"value":314},"# Windows\n",{"type":61,"tag":241,"props":316,"children":317},{"class":243,"line":254},[318],{"type":61,"tag":241,"props":319,"children":320},{},[321],{"type":75,"value":322},"netstat -ano | findstr :9000\n",{"type":61,"tag":81,"props":324,"children":326},{"id":325},"fix-common-port-9000-problems",[327],{"type":75,"value":328},"Fix common port 9000 problems",{"type":61,"tag":62,"props":330,"children":331},{},[332,345,347,353,355,360,362,368,370,375],{"type":61,"tag":66,"props":333,"children":334},{},[335,337,343],{"type":75,"value":336},"PHP-FPM: blank page or ",{"type":61,"tag":70,"props":338,"children":340},{"className":339},[],[341],{"type":75,"value":342},"ERR_EMPTY_RESPONSE",{"type":75,"value":344},".",{"type":75,"value":346}," You opened the FastCGI port directly. Browse to the web server instead and check it forwards PHP with ",{"type":61,"tag":70,"props":348,"children":350},{"className":349},[],[351],{"type":75,"value":352},"fastcgi_pass 127.0.0.1:9000;",{"type":75,"value":354}," (or a Unix socket). A ",{"type":61,"tag":356,"props":357,"children":358},"em",{},[359],{"type":75,"value":36},{"type":75,"value":361}," from Nginx means PHP-FPM isn't running or isn't listening where ",{"type":61,"tag":70,"props":363,"children":365},{"className":364},[],[366],{"type":75,"value":367},"fastcgi_pass",{"type":75,"value":369}," points. See ",{"type":61,"tag":371,"props":372,"children":373},"a",{"href":37},[374],{"type":75,"value":36},{"type":75,"value":344},{"type":61,"tag":62,"props":377,"children":378},{},[379,384,386,392,394,400,402,408,410,416],{"type":61,"tag":66,"props":380,"children":381},{},[382],{"type":75,"value":383},"SonarQube refuses to connect.",{"type":75,"value":385}," It needs a minute or two to start, and often dies on Linux hosts because Elasticsearch needs ",{"type":61,"tag":70,"props":387,"children":389},{"className":388},[],[390],{"type":75,"value":391},"vm.max_map_count",{"type":75,"value":393}," of at least 262144. Check ",{"type":61,"tag":70,"props":395,"children":397},{"className":396},[],[398],{"type":75,"value":399},"logs/es.log",{"type":75,"value":401}," and ",{"type":61,"tag":70,"props":403,"children":405},{"className":404},[],[406],{"type":75,"value":407},"logs/web.log",{"type":75,"value":409},", or ",{"type":61,"tag":70,"props":411,"children":413},{"className":412},[],[414],{"type":75,"value":415},"docker logs",{"type":75,"value":417}," for the container.",{"type":61,"tag":62,"props":419,"children":420},{},[421,426,428,434,436,442],{"type":61,"tag":66,"props":422,"children":423},{},[424],{"type":75,"value":425},"MinIO shows XML instead of a UI.",{"type":75,"value":427}," You're on the API port. The console is on whatever ",{"type":61,"tag":70,"props":429,"children":431},{"className":430},[],[432],{"type":75,"value":433},"--console-address",{"type":75,"value":435}," says, conventionally ",{"type":61,"tag":70,"props":437,"children":439},{"className":438},[],[440],{"type":75,"value":441},":9001",{"type":75,"value":344},{"type":61,"tag":62,"props":444,"children":445},{},[446,451],{"type":61,"tag":66,"props":447,"children":448},{},[449],{"type":75,"value":450},"Portainer not on 9000.",{"type":75,"value":452}," Recent Portainer versions serve HTTPS on 9443 by default, and HTTP on 9000 only if you publish it.",{"type":61,"tag":62,"props":454,"children":455},{},[456,461],{"type":61,"tag":66,"props":457,"children":458},{},[459],{"type":75,"value":460},"Xdebug not connecting.",{"type":75,"value":462}," Xdebug 3 uses 9003, not 9000. If your IDE still listens on 9000, it may be competing with PHP-FPM.",{"type":61,"tag":81,"props":464,"children":466},{"id":465},"free-port-9000-or-move-a-service",[467],{"type":75,"value":468},"Free port 9000 or move a service",{"type":61,"tag":231,"props":470,"children":472},{"className":233,"code":471,"language":235,"meta":7,"style":7},"kill -9 $(lsof -ti :9000)          # macOS / Linux\n",[473],{"type":61,"tag":70,"props":474,"children":475},{"__ignoreMap":7},[476],{"type":61,"tag":241,"props":477,"children":478},{"class":243,"line":244},[479,484,489,495,499,504,509,514],{"type":61,"tag":241,"props":480,"children":481},{"style":264},[482],{"type":75,"value":483},"kill",{"type":61,"tag":241,"props":485,"children":486},{"style":264},[487],{"type":75,"value":488}," -9",{"type":61,"tag":241,"props":490,"children":492},{"style":491},"--shiki-default:#E1E4E8",[493],{"type":75,"value":494}," $(",{"type":61,"tag":241,"props":496,"children":497},{"style":258},[498],{"type":75,"value":261},{"type":61,"tag":241,"props":500,"children":501},{"style":264},[502],{"type":75,"value":503}," -ti",{"type":61,"tag":241,"props":505,"children":506},{"style":270},[507],{"type":75,"value":508}," :9000",{"type":61,"tag":241,"props":510,"children":511},{"style":491},[512],{"type":75,"value":513},")          ",{"type":61,"tag":241,"props":515,"children":516},{"style":248},[517],{"type":75,"value":251},{"type":61,"tag":231,"props":519,"children":521},{"className":300,"code":520,"language":302,"meta":7,"style":7},"taskkill /PID \u003Cpid> /F             # Windows\n",[522],{"type":61,"tag":70,"props":523,"children":524},{"__ignoreMap":7},[525],{"type":61,"tag":241,"props":526,"children":527},{"class":243,"line":244},[528],{"type":61,"tag":241,"props":529,"children":530},{},[531],{"type":75,"value":520},{"type":61,"tag":62,"props":533,"children":534},{},[535],{"type":75,"value":536},"Usually it's cleaner to move one service:",{"type":61,"tag":538,"props":539,"children":540},"ul",{},[541,568,587,598],{"type":61,"tag":542,"props":543,"children":544},"li",{},[545,547,553,555,561,563],{"type":75,"value":546},"PHP-FPM: ",{"type":61,"tag":70,"props":548,"children":550},{"className":549},[],[551],{"type":75,"value":552},"listen = 127.0.0.1:9001",{"type":75,"value":554}," in the pool config (",{"type":61,"tag":70,"props":556,"children":558},{"className":557},[],[559],{"type":75,"value":560},"www.conf",{"type":75,"value":562},"), and update ",{"type":61,"tag":70,"props":564,"children":566},{"className":565},[],[567],{"type":75,"value":367},{"type":61,"tag":542,"props":569,"children":570},{},[571,573,579,581],{"type":75,"value":572},"SonarQube: ",{"type":61,"tag":70,"props":574,"children":576},{"className":575},[],[577],{"type":75,"value":578},"sonar.web.port=9001",{"type":75,"value":580}," in ",{"type":61,"tag":70,"props":582,"children":584},{"className":583},[],[585],{"type":75,"value":586},"conf/sonar.properties",{"type":61,"tag":542,"props":588,"children":589},{},[590,592],{"type":75,"value":591},"MinIO: ",{"type":61,"tag":70,"props":593,"children":595},{"className":594},[],[596],{"type":75,"value":597},"minio server /data --address :9100 --console-address :9101",{"type":61,"tag":542,"props":599,"children":600},{},[601,603],{"type":75,"value":602},"Docker: change the host side only, for example ",{"type":61,"tag":70,"props":604,"children":606},{"className":605},[],[607],{"type":75,"value":608},"-p 9100:9000",{"type":61,"tag":81,"props":610,"children":612},{"id":611},"open-localhost9000-from-another-device",[613],{"type":75,"value":614},"Open localhost:9000 from another device",{"type":61,"tag":62,"props":616,"children":617},{},[618,620,626,628,634,636,642],{"type":75,"value":619},"For HTTP services (SonarQube, Portainer, Graylog), make sure they listen on ",{"type":61,"tag":70,"props":621,"children":623},{"className":622},[],[624],{"type":75,"value":625},"0.0.0.0",{"type":75,"value":627}," (the default for most Docker images) and open ",{"type":61,"tag":70,"props":629,"children":631},{"className":630},[],[632],{"type":75,"value":633},"http://YOUR-LAN-IP:9000",{"type":75,"value":635},". PHP-FPM should stay on ",{"type":61,"tag":70,"props":637,"children":639},{"className":638},[],[640],{"type":75,"value":641},"127.0.0.1",{"type":75,"value":643},"; an exposed FastCGI port lets anyone on the network ask PHP-FPM to execute files.",{"type":61,"tag":81,"props":645,"children":647},{"id":646},"webhooks-from-tools-on-port-9000",[648],{"type":75,"value":649},"Webhooks from tools on port 9000",{"type":61,"tag":62,"props":651,"children":652},{},[653],{"type":75,"value":654},"Two of these tools send webhooks:",{"type":61,"tag":538,"props":656,"children":657},{},[658,667],{"type":61,"tag":542,"props":659,"children":660},{},[661,665],{"type":61,"tag":66,"props":662,"children":663},{},[664],{"type":75,"value":145},{"type":75,"value":666}," posts the quality gate result to a URL you configure under Administration, then Webhooks, after each analysis.",{"type":61,"tag":542,"props":668,"children":669},{},[670,674],{"type":61,"tag":66,"props":671,"children":672},{},[673],{"type":75,"value":163},{"type":75,"value":675}," sends bucket notifications (object created, deleted) to a webhook target.",{"type":61,"tag":62,"props":677,"children":678},{},[679,681,685],{"type":75,"value":680},"To see exactly what they send, point them at a free ",{"type":61,"tag":371,"props":682,"children":683},{"href":21},[684],{"type":75,"value":18},{"type":75,"value":686}," URL and read the captured request. To handle the events with code on your laptop, forward them to a local route:",{"type":61,"tag":231,"props":688,"children":690},{"className":233,"code":689,"language":235,"meta":7,"style":7},"relay forward --bucket sonar-events http://localhost:8000/sonar\n",[691],{"type":61,"tag":70,"props":692,"children":693},{"__ignoreMap":7},[694],{"type":61,"tag":241,"props":695,"children":696},{"class":243,"line":244},[697,702,707,712,717],{"type":61,"tag":241,"props":698,"children":699},{"style":258},[700],{"type":75,"value":701},"relay",{"type":61,"tag":241,"props":703,"children":704},{"style":270},[705],{"type":75,"value":706}," forward",{"type":61,"tag":241,"props":708,"children":709},{"style":264},[710],{"type":75,"value":711}," --bucket",{"type":61,"tag":241,"props":713,"children":714},{"style":270},[715],{"type":75,"value":716}," sonar-events",{"type":61,"tag":241,"props":718,"children":719},{"style":270},[720],{"type":75,"value":721}," http://localhost:8000/sonar\n",{"type":61,"tag":62,"props":723,"children":724},{},[725],{"type":75,"value":726},"The bucket's public URL stays the same, so you configure it in SonarQube or MinIO once, and every delivery is logged for replay. Keep the services themselves private: neither the SonarQube admin UI nor the MinIO API should be on a public URL without authentication you trust.",{"type":61,"tag":728,"props":729,"children":730},"style",{},[731],{"type":75,"value":732},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":276,"depth":276,"links":734},[735,736,737,738,739],{"id":83,"depth":254,"text":86},{"id":325,"depth":254,"text":328},{"id":465,"depth":254,"text":468},{"id":611,"depth":254,"text":614},{"id":646,"depth":254,"text":649},"markdown","content:localhost:9000.md","content","localhost/9000.md","localhost/9000","md",{"loc":4},1793199809452]