ฉันตั้งค่าเซิร์ฟเวอร์โหนดอย่างง่ายใน Docker
นักเทียบท่าไฟล์
FROM node:latest
RUN apt-get -y update
ADD example.js .
EXPOSE 1337
CMD node example.js
example.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n'+new Date);
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
ตอนนี้สร้างภาพ
$ docker build -t node_server .
ตอนนี้รันในคอนเทนเนอร์
$ docker run -p 1337:1337 -d node_server
$ 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70
ตรวจสอบว่าคอนเทนเนอร์กำลังทำงานอยู่และมีการแมปพอร์ต:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5909e87302ab node_server "/bin/sh -c 'node exa" 7 seconds ago Up 6 seconds 0.0.0.0:1337->1337/tcp grave_goldberg
ตอนนี้เรามาแนบไปกับคอนเทนเนอร์และตรวจสอบว่าเซิร์ฟเวอร์ทำงานอยู่ภายใน:
$ docker exec -it 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70 /bin/bash
และในประเภทบรรทัดคำสั่งคอนเทนเนอร์:
root@5909e87302ab:/# curl http://localhost:1337
Hello World
Mon Feb 15 2016 16:28:38 GMT+0000 (UTC)
ดูดีใช่มั้ยล่ะ?
ปัญหา
เมื่อฉันรันคำสั่ง curl เดียวกันบนโฮสต์ (หรือนำทางด้วยเบราว์เซอร์ของฉันไปที่ http://localhost:1337) ฉันไม่เห็นอะไรเลย
มีความคิดใดบ้างว่าทำไมการแมปพอร์ตระหว่างคอนเทนเนอร์และโฮสต์จึงไม่ทำงาน
สิ่งที่ฉันได้ลองไปแล้ว:
- วิ่งด้วยธง
--expose 1337
--expose
คุณสร้างภาพด้วยคำสั่งEXPOSE
จากนั้น คุณเรียกใช้ด้วย--publish
(หรือ-p
) ดูคำตอบของฉันด้านล่าง - person VonC   schedule 15.02.2016