无法访问localhost上的nodejs应用程序:4200(docker run -p 4200:4200 ....)

时间:2018-01-16 15:51:45

标签: docker docker-compose angular-cli dockerfile docker-machine

我需要一些帮助,对码头工作者来说是新手;感觉这是我错过的一些小事。

我正在尝试使用dockerfile和docker-compose运行nodejs应用程序;我在Ubuntu 17.04 LTS但是,虽然状态显示UP和runnning我无法从 localhost:4200

访问该应用程序
docker-compose.yml
version: '3'

services:
 my-app:
    build:
      context: .
      dockerfile: Dockerfile
    restart: unless-stopped
    volumes:
      - .:/usr/src/app
    ports:
      - "4200:4200"

docker ps

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                     NAMES
e6a99aab4e37        my-app   "ng serve"               10 minutes ago      Up 10 minutes       0.0.0.0:4200->4200/tcp    my-app_1

我运行了以下命令并获得了一个IP地址,我在浏览器中使用了ip:port#但是app不会出现:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' 'my-app_1'

当我去localhost时:4200它不起作用; 我也尝试过:docker run --rm -it -p 4200:4200 my_app_container它运行了,我可以看到npm start运行并侦听端口4200但是当我进入浏览器并输入localhost:4200时我什么都没得到,只是:这个网站不能到达; ERR_NAME_NOT_RESOLVED

  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 or npm serve即可手动构建应用程序,package.json - >脚本部分并开始服务,然后localhost:4200运行正常,所以我迷失了1.

为什么在通过docker运行时我无法在浏览器上访问localhost:4200ipaddress:4200但是如果我通过运行npm start在docker之外手动构建它会有效吗?

1 个答案:

答案 0 :(得分:2)

修改

https://stackoverflow.com/a/48286174/2663059

有解决方案。

修改

首先。你为什么这样做。

#EXPOSE 4200
在Dockerfile中

。前面的#表示在dockerfile中注释。使用此

 EXPOSE 4200

#EXPOSE 4200 means you have not expose the port .

接下来检查在Docker中运行节点服务器的容器。 你怎么检查这个。     docker exec -it nept0 bash 或者可以尝试

docker exec -it nept0 /bin/bash

然后你可以运行

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

您可以在此处阅读docker exec更多https://docs.docker.com/engine/reference/commandline/exec/

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