nodejs应用程序没有';在docker容器中运行时,无法连接到localhost

nodejs应用程序没有';在docker容器中运行时,无法连接到localhost,docker,docker-compose,dockerfile,docker-swarm,docker-machine,Docker,Docker Compose,Dockerfile,Docker Swarm,Docker Machine,docker编写文件: My environment: Ubunut 17.04 LTS npm --version: 5.6.0 nodejs --version: 4.7.2 angular cli version: 1.6.4 我注释掉了dockerfile中的EXPOSE 4200,因为我已经从docker-compose.yml文件中挂载了它,这不正常吗,我应该在docker-compose中公开并在docker-compose中挂载吗 在命令行上运行npm start将在浏览器上成

docker编写文件:

My environment:
Ubunut 17.04 LTS
npm --version: 5.6.0
nodejs --version: 4.7.2
angular cli version: 1.6.4
我注释掉了dockerfile中的EXPOSE 4200,因为我已经从docker-compose.yml文件中挂载了它,这不正常吗,我应该在docker-compose中公开并在docker-compose中挂载吗

在命令行上运行npm start将在浏览器上成功启动应用程序,因为我可以转到
localhost:4200
并看到应用程序正在运行

但是,如果我使用docker构建应用程序并运行docker compose up,我会看到nodejs服务器仍在
localhost:4200
上运行,但是,我无法访问该应用程序,转到
localhost:4200
不会显示该页面

手动运行应用程序效果很好,我可以在浏览器上看到它:

从DOCKER-COMPOSE UP运行应用程序运行正常,但我无法在localhost:4200的浏览器上看到该应用程序

从docker到compose

ubuntu17@ubuntu17:~/playground/apps/myapp-ui$ ng serve
** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
Date: 2018-01-16T16:22:51.912Z                                                          
Hash: 40ac2bd0588ee2136d15
Time: 13963ms
chunk {inline} inline.bundle.js (inline) 5.79 kB [entry] [rendered]
chunk {main} main.bundle.js (main) 275 kB [initial] [rendered]
chunk {polyfills} polyfills.bundle.js (polyfills) 559 kB [initial] [rendered]
chunk {styles} styles.bundle.js (styles) 514 kB [initial] [rendered]
chunk {vendor} vendor.bundle.js (vendor) 12.1 MB [initial] [rendered]

webpack: Compiled successfully.

在docker compose文件中,确保导出端口:

ubuntu17@ubuntu17:~/playground/apps/my-app-ui$ docker-compose up 
Creating network "my-app_default" with the default driver
Creating my-app_my-app_1 ... done
Attaching to my-app_my-app_1
my-app_1  | ** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
my-app_1  | Date: 2018-01-16T16:28:05.444Z
my-app_1  | Hash: 40ac2bd0588ee2136d15
my-app_1  | Time: 13584ms
my-app_1  | chunk {inline} inline.bundle.js (inline) 5.79 kB [entry] [rendered]
my-app_1  | chunk {main} main.bundle.js (main) 271 kB [initial] [rendered]
my-app_1  | chunk {polyfills} polyfills.bundle.js (polyfills) 549 kB [initial] [rendered]
my-app_1  | chunk {styles} styles.bundle.js (styles) 511 kB [initial] [rendered]
my-app_1  | chunk {vendor} vendor.bundle.js (vendor) 12.1 MB [initial] [rendered]
my-app_1  | 
my-app_1  | webpack: Compiled successfully.

好的,正如您在问题中所说,您的进程正在侦听
localhost:4200
上的连接

在docker容器中,
localhost
是容器本身的环回设备的地址,它是分离的,无法从主机网络访问

您需要编辑节点进程,以便通过编辑Dockerfile中的入口点使其侦听所有地址,如下所示:

services:
  node:
   ports:
     - 4200:4200

分享你的docker-compose.yml谢谢你的帮助,我更新了我上面的问题,将我的docker-compose.yml和DockerFiles都包括在内。非常感谢@yamenk的帮助,先生,如果0.0.0.0指向ip地址,即我应该ping localhost和我从中获得的ip,我会像这样将它添加到entrypoint->entrypoint[“ng”,“serve”、“-H”、“ipObtainedFromPing”]不,0.0.0.0是绑定到docker容器中所有接口的特殊地址,因此您需要直接使用“0.0.0.0”“好吧,现在让我试试;请站在旁边,我会尝试运行并立即向您更新!!哇,谢谢你,先生,我昨晚和今天都花在这上面了;非常感谢,我今天学到了一些东西!!!这是我的荣幸
services:
  node:
   ports:
     - 4200:4200
ENTRYPOINT ["ng", "serve", "-H", "0.0.0.0"]