我正在用Docker Compose运行2张图片,并且遇到了从我的Mac打到本地主机的麻烦。 我正在公开端口3000.我错过了什么?

我正在使用Docker构build一个Node / Mongo应用程序,并且在运行docker-compose up时遇到从运行MacOs的主机打到本地主机的麻烦。 使用邮递员或curl -i localhost:3000不会返回任何内容。 我也尝试检查容器,并与该ip连接。 我究竟做错了什么? 谢谢!

泊坞窗,compose.yml:

 version: "2" services: web: build: . ports: - "3000:3000" volumes: - .:/app env_file: - todoListDocker.env links: - mongo mongo: image: mongo environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=tWwp3Fm4hZUsaLw4 volumes: - mongo:/data/db ports: - "27017:27017" env_file: - todoListDocker.env volumes: mongo: 

Dockerfile:

 FROM node:boron MAINTAINER Clinton Medbery <clintomed@gmail.com> RUN ["apt-get", "update"] RUN ["apt-get", "install", "-y", "vim"] RUN mkdir - p /app WORKDIR /app COPY package.json /app RUN npm install COPY . /app EXPOSE 3000 CMD ["npm", "start"] 

Index.js:

 const express = require('express'); const morgan = require('morgan'); const bodyParser = require('body-parser'); const mongoose = require('mongoose'); var app = express(); var router = require('./services/router'); //Use ENV Variables console.log("Connecting to Mongo"); mongoose.connect('mongodb://root:tWwp3Fm4hZUsaLw4@mongo:27017'); // mongoose.connect('mongodb://localhost:todoList/todoList'); console.log("Connected to Mongo"); app.use(morgan('combined')); app.use(bodyParser.json()); app.use('/v1', router); var PORT = process.env.PORT || 3000; var HOST = process.env.HOST || '127.0.0.1'; app.get('/hello', function (req, res) { console.log("Hello World"); res.send({hello:'Hello World!'}); }); console.log('Listening on port ', HOST, PORT); app.listen(PORT, HOST); 

您的快递服务器正在监听localhost端口3000。

 var PORT = process.env.PORT || 3000; var HOST = process.env.HOST || '127.0.0.1'; 

这将绑定到容器的本地主机。 这是独立于Mac的本地主机,从任何其他容器的本地主机。 你不能从容器外面find它。

您需要绑定到容器的外部接口,这将使Mac或其他容器连接到端口。 你可以使用这个特殊的地址0.0.0.0

 var PORT = process.env.PORT || 3000; var HOST = process.env.HOST || '0.0.0.0'; 

既然快递服务器可以从Mac访问,端口绑定3000:3000将工作。 默认情况下,这将被绑定到所有Mac的networking接口上,但是如果您愿意,可以将其限制在Mac的本地主机上。

 ports: - "127.0.0.1:3000:3000"