diese letzten zwei Tage habe ich Probleme mit Docker und ich kann es bekommen. Im Anschluss an das Andockdokument können Sie die Ports angeben, auf denen ein Container auf Verbindungen mit EXPOSE
wartet. So weit, ist es gut!Docker EXPOSE. Kann es nicht bekommen
Wenn meine App auf Port 8080 hört, sollte ich meinen Docker-Container mit EXPOSE 8080
aussetzen und an Port 80 des Haupthosts mit docker run -p 80:8080
binden.
Hier ist meine Dockerfile:
# DOCKER-VERSION 0.0.1
FROM ubuntu:14.10
# make sure apt is up to date
RUN apt-get update
# install nodejs and npm
RUN apt-get install -y nodejs-legacy npm git git-core
ADD package.json /root/
ADD server.js /root/
# start script
ADD start.sh /root/
RUN chmod +x /root/start.sh
EXPOSE 8080
CMD ./root/start.sh
Und mein start.sh
Runan nur cd /root/
& npm install
& node server.js
.
bekam ich einen einfacher express NodeJS App:
var express = require('express');
// Constants
var PORT = 8080;
// App
var app = express();
app.get('/', function (req, res) {
res.send('Hello world\n');
});
app.listen(PORT);
console.log('Running on http://localhost:' + PORT);
Hier ist, wie ich mein Docker Bild bauen: docker build -t app1 .
Und wie ich meine Docker starten: docker run -it -p 80:8080 --name app1 app1
Was wirklich verdrahtet ist, ist dies nicht Arbeiten. Um es funktionieren zu lassen, muss ich EXPOSE 8080
zu EXPOSE 80
ändern. Ich verstehe es nicht.
Eine Erklärung?
Dank für das Lesen, Tom
Dies ist ein Konfigurationsproblem, ich verwende diese Art von Port-Mapping die ganze Zeit. "Nicht funktioniert" ist keine ausreichende Information. Sind die Ports auf dem Host geöffnet? Was passiert, wenn Sie es direkt abbilden? -p 8080: 8080? etc. etc. – user2105103
Wenn ich sage "Nicht funktioniert", bedeutet dies, dass ich keine Verbindung zu meinem Container mit curl oder einem Browser auf Port 80 herstellen kann, auch wenn ich meinen Container auf dem Haupt-Host anfordere. Die Verwendung von "-p 8080: 8080" ändert nichts. –