无法连接到OS X上发布的Docker端口

我试图在OS X(最新更新10.12.5)的Docker(17.06)容器中运行一个简单的Node.js / Expressnetworking应用程序。 我无法连接到localhost:3000的应用程序,我无法弄清楚什么是错的。 我也尝试通过运行ip addr | grep global连接到虚拟机的IP地址 ip addr | grep global在其控制台ip addr | grep global无济于事。

我的应用程序实际上只是JetBrains Webstorm在创buildtypes为“Node.js Express App”的新项目时创build的框架。 请注意,我可以通过npm start在主机系统上运行这个应用程序,并成功地连接到localhost:3000

然后我创build了一个Docker镜像,如下所示:

 docker build -t joonas/meancopy . 

运行:

 docker run -it -v `pwd`:/home/dev/src --name meancopy joonas/meancopy -p 3000:3000 

在被npm start VM的shell之后,我运行npm start并得到以下内容:

 [dev@c24d24f58f1d:~/src$ npm start npm info it worked if it ends with ok npm info using npm@5.0.3 npm info using node@v8.1.2 npm info lifecycle npmtest@0.0.0~prestart: npmtest@0.0.0 npm info lifecycle npmtest@0.0.0~start: npmtest@0.0.0 > npmtest@0.0.0 start /home/dev/src > node ./bin/www 

输出和在主机上运行的时候一样,在开始的时候需要“npm info”行。 但是,我无法在localhost:3000连接到此服务器。

我也尝试用--expose=3000--net="host"运行镜像,因为我在网上search解决scheme的时候发现了这些,但是他们没有帮助(而且我的理解甚至不需要在这里)。

任何帮助或debugging的想法,非常感谢!

您的docker run命令是不好的

 docker run -it -v `pwd`:/home/dev/src --name meancopy joonas/meancopy -p 3000:3000 

你写这个的方式,容器将尝试执行-p 3000:3000作为容器的stream程实例。 您需要在图像的名称之前加上-p参数。

 docker run -it -v `pwd`:/home/dev/src --name meancopy -p 3000:3000 joonas/meancopy 

现在docker会运行你的Dockerfile中定义的命令 – 这可能是node.js应用程序,如预期的那样。