无法在localhost:4200(docker run-p 4200:4200…)的浏览器上访问nodejs应用程序

无法在localhost:4200(docker run-p 4200:4200…)的浏览器上访问nodejs应用程序,docker,docker-compose,angular-cli,dockerfile,docker-machine,Docker,Docker Compose,Angular Cli,Dockerfile,Docker Machine,我需要一些帮助,新来的docker;有一种感觉,这是我错过的一件小事 我正在尝试使用dockerfile和docker compose运行nodejs应用程序;我使用的是Ubuntu17.04 LTS,但即使状态显示并运行,我也无法从localhost:4200访问该应用程序 docker ps 我运行了以下命令并获得了一个ip地址,我在浏览器中使用了该ip:port,但应用程序不会显示: docker inspect --format '{{ .NetworkSettings.IPAddres

我需要一些帮助,新来的docker;有一种感觉,这是我错过的一件小事

我正在尝试使用dockerfile和docker compose运行nodejs应用程序;我使用的是Ubuntu17.04 LTS,但即使状态显示并运行,我也无法从localhost:4200访问该应用程序

docker ps

我运行了以下命令并获得了一个ip地址,我在浏览器中使用了该ip:port,但应用程序不会显示:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' 'my-app_1'
当我转到localhost:4200时,它不工作; 我也尝试过:
docker-run--rm-it-p 4200:4200我的应用程序容器
运行,我可以看到npm开始运行并侦听端口4200,但当我进入浏览器并键入
localhost:4200
时,我一无所获,只是:无法访问此站点;错误\u名称\u未\u解析

  ubuntu17@ubuntu:~/playground/apps/my_app-ui$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
my_app   latest              d41d3d77811b        17 minutes ago      1.24GB
nept0                 latest              df93134e2539        21 minutes ago      1.24GB
node                  9                   c888d933885c        5 days ago          676MB
registry              2.6.1               c2a449c9f834        6 months ago        33.2MB
ubuntu17@ubuntu:~/playground/apps/my_app-ui$ docker run -it --rm -p 4200:4200 nept0
** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
Date: 2018-01-16T15:46:19.502Z                                                          
Hash: 00ec980debaf8e47350d
Time: 12386ms
chunk {inline} inline.bundle.js (inline) 5.79 kB [entry] [rendered]
chunk {main} main.bundle.js (main) 270 kB [initial] [rendered]
chunk {polyfills} polyfills.bundle.js (polyfills) 549 kB [initial] [rendered]
chunk {styles} styles.bundle.js (styles) 511 kB [initial] [rendered]
chunk {vendor} vendor.bundle.js (vendor) 11.8 MB [initial] [rendered]

webpack: Compiled successfully.
最后: -最奇怪的是,如果我不使用docker,只需通过简单运行手动构建应用程序:
ng serve或npm serve
,它查看
package.json
->脚本部分并启动ng serve,然后
localhost:4200
运行良好,因此我在1到1之间迷失方向

为什么我在通过docker运行时无法在浏览器上访问
localhost:4200
ipaddress:4200
,但如果我在docker外部通过仅运行npm start手动构建,它会起作用?

EDIT

有解决办法

编辑

首先。你为什么这么做

#EXPOSE 4200
在Dockerfile中前面是指dockerfile中的注释。用这个

 EXPOSE 4200
#EXPOSE 4200表示您尚未公开端口。

然后检查是否在Docker中运行节点服务器的容器。 你怎么能查到这个。 docker exec-it nept0 bash 或者可以试试

docker exec -it nept0 /bin/bash
然后你就可以跑了

curl localhost:4200node.js的get api如果工作正常,那么您的节点工作正常#EXPOSE 4200就是罪魁祸首

你可以在这里阅读docker exec的更多信息


如果有任何问题,请告诉我

谢谢你帮助我;我注释掉了EXPOSE,因为我正在docker-compose.yml文件中装载端口,我是否必须在docker-compose文件和docker-compose文件中的两个位置都进行公开?我想我可以从docker compose上安装端口,然后就好了?但是让我试着取消注释,看看发生了什么没有问题。检查并让我知道是否有任何问题,这不是什么大问题。问题是:我需要做:ENTRYPOINT[“ng”,“serve”,“-H”,“0.0.0.0”]而不是ENTRYPOINT[“ng”,“serve”]来告诉docker侦听绑定到我docker容器中的所有接口:这是我从中获得解决方案的地方:-希望这有助于某人冷却:)。这就是这个问题的解决方案,以防其他人陷入困境:
 EXPOSE 4200
docker exec -it nept0 /bin/bash