pel*_*can 6 docker dockerfile docker-compose docker-machine angular-cli
我需要一些帮助,对 docker 很陌生;感觉这是我错过的一些小事。
我正在尝试使用 dockerfile 和 docker-compose 运行 nodejs 应用程序;然而,我使用的是 Ubuntu 17.04 LTS,尽管状态显示为 UP 并正在运行,但我无法从localhost:4200访问该应用程序
docker-compose.yml
version: '3'
services:
my-app:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
volumes:
- .:/usr/src/app
ports:
- "4200:4200"
Run Code Online (Sandbox Code Playgroud)
码头工人
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
Run Code Online (Sandbox Code Playgroud)
我运行了以下命令并获得了一个 IP 地址,我在浏览器中使用了该 ip:port# 但应用程序不会显示:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' 'my-app_1'
Run Code Online (Sandbox Code Playgroud)
当我转到 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.
Run Code Online (Sandbox Code Playgroud)
最后: - 最奇怪的事情是,如果我不使用 docker,只是通过简单地运行: 来手动构建应用程序:ng serve or npm serve它会查看package.json-> 脚本部分并启动 ng 服务,然后localhost:4200运行良好,所以我迷失在 1 中。
为什么我在通过 docker 运行时无法访问localhost:4200或ipaddress:4200在浏览器上运行,但如果我通过运行 npm start 在 docker 外部手动构建,它就可以工作?
编辑
有解决办法。
编辑
首先 。为什么你要这样做。
#EXPOSE 4200
Run Code Online (Sandbox Code Playgroud)
在 Dockerfile 中。前面的 # 表示 dockerfile 中的注释。用这个
EXPOSE 4200
Run Code Online (Sandbox Code Playgroud)
#EXPOSE 4200 means you have not expose the port .
接下来检查 Docker 中是否运行节点服务器的容器。怎么查是不是这个啊。docker exec -it nept0 bash 或者可以尝试
docker exec -it nept0 /bin/bash
Run Code Online (Sandbox Code Playgroud)
然后你就可以运行
curl localhost:4200 或Node.js 的 get api(如果工作正常)则您的节点工作正常#EXPOSE 4200 是罪魁祸首。
您可以在此处阅读有关 docker exec 的更多信息https://docs.docker.com/engine/reference/commandline/exec/
如果有任何问题请告诉我。
| 归档时间: |
|
| 查看次数: |
4361 次 |
| 最近记录: |