无法在localhost:4200(docker run-p 4200:4200…)的浏览器上访问nodejs应用程序
我需要一些帮助,新来的docker;有一种感觉,这是我错过的一件小事 我正在尝试使用dockerfile和docker compose运行nodejs应用程序;我使用的是Ubuntu17.04 LTS,但即使状态显示并运行,我也无法从localhost:4200访问该应用程序 docker ps 我运行了以下命令并获得了一个ip地址,我在浏览器中使用了该ip:port,但应用程序不会显示:无法在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 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:4200或node.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