My environment: Ubunut 17.04 LTS npm --version: 5.6.0 nodejs --version: 4.7.2 angular cli version: 1.6.4
docker-compose文件:
version: '3' services: my-app: build: context: . dockerfile: Dockerfile restart: unless-stopped volumes: - .:/usr/src/app ports: - "4200:4200"
我已在dockerfile中注释掉EXPOSE 4200,因为我已经从docker- compose.yml文件中挂载了它,不是吗,我应该在dockerfile中公开并在docker-compose中挂载吗?
在命令行上运行npm start可以在浏览器中成功启动该应用程序,因为我可以转到localhost:4200该应用程序并查看其运行情况。
localhost:4200
但是,如果我使用docker构建应用程序并运行docker- compose,我发现nodejs服务器仍在运行localhost:4200,但是,我无法访问该应用程序,进入该localhost:4200操作不会显示该页面。
手动运行该应用程序非常有效,我可以在浏览器上看到它:
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 UP运行应用程序,但运行良好,但我无法使用localhost:4200在浏览器上看到该应用程序
从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是容器本身的回送设备的地址,该地址与主机网络分开且不可访问。
localhost
您需要编辑节点进程,以使其通过编辑Dockerfile中的入口点来侦听所有地址,如下所示:
ENTRYPOINT ["ng", "serve", "-H", "0.0.0.0"]