2016-10-20 4 views
-1

app.json für PM2 Karte (src/app.py ist Flask app):Docker: kann nicht zwei Containerhäfen an einen Host-Port

{ 
    "apps": [ 
    { 
     "exec_mode": "fork", 
     "script": "src/app.py", 
     "args": ["-p", "8080"] 
    }, 
    { 
     "exec_mode": "fork", 
     "script": "src/app.py", 
     "args": ["-p", "8081"] 
    } 
    ] 
} 
~   

Dockerfile:

EXPOSE 8080 8081 
CMD ["pm2", "start", "app.json"] 

Fehler beim Docker läuft :

docker run -p 8080:8080 -p 8080:8081 oct20 
docker: Error response from daemon: driver failed programming external connectivity on endpoint high_fermi (xxxxxxxxxxx): Bind for 0.0.0.0:8080 failed: port is already allocated. 

Irgendwelche Ideen? Danke

+1

Ja, Sie können keinen Port zweimal zuweisen – user2915097

+0

@ user2915097 wie zwei Container-Port zu einem Host-Port zuordnen? Ist es möglich? – BAE

+0

Sie können sich HAProxy oder eine andere Load-Balancing-Lösung ansehen. –

Antwort

3

Sie können nicht zwei Dinge auf einem Port im Host abhören - ob es sich um separate Ports in einem Container oder zwei Docker Container oder zwei andere Apps handelt. Es ist keine Docker-Einschränkung, es ist Teil des Betriebssystem-Netzwerk-Stacks.

Wo würde der Host eine Anfrage an Port 8080 senden, wenn Sie das in diesem Fall tun könnten? Um Port 8080 im Container oder Port 8081 zu portieren, oder Multicast an beide?

+0

Ich möchte den Verkehr auf die zwei App (s) teilen (8080, 8081). Vielleicht kann mir ein Load Balancer helfen. – BAE

+0

Ja, ich würde mir drei Container ansehen - einen für jede App und [und Nginx als Load Balancer verwenden] (http://nginx.org/en/docs/http/load_balancing.html). Externer Datenverkehr kommt in Nginx, App-Container müssen keine Ports offenlegen - der Nginx-Container kann auf Container-Ports im selben Docker-Netzwerk zugreifen. –