当 运行 在 docker 容器中时,nodejs 应用程序不连接到本地主机
nodejs app doesn't connect to localhost when running within a docker container
My environment:
Ubunut 17.04 LTS
npm --version: 5.6.0
nodejs --version: 4.7.2
angular cli version: 1.6.4
docker-编写文件:
version: '3'
services:
my-app:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
volumes:
- .:/usr/src/app
ports:
- "4200:4200"
我在 docker 文件中注释掉了 EXPOSE 4200,因为我已经从 docker-compose.yml 文件中安装了它,这样不行吗,我应该在 docker文件并挂载到 docker-compose?
运行 命令行上的 npm start 在浏览器上成功启动应用程序,因为我可以转到 localhost:4200
并查看应用程序 运行ning。
但是,如果我使用 docker 和 运行 docker-compose 构建我的应用程序,我看到 nodejs 服务器仍在 运行ning [=16] =],但是,我无法访问应用程序,转到 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[=19 的浏览器上看到该应用程序=]
然后从docker-组成
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.
在您的 docker-compose 文件中,确保导出端口:
services:
node:
ports:
- 4200:4200
好的,正如您在问题中所说,您的进程正在侦听 localhost:4200
上的连接。
在docker容器中,localhost
是容器本身的环回设备的地址,它与您的主机网络是分开的,无法访问。
您需要编辑您的节点进程,以便通过编辑 Dockerfile 中的入口点使其侦听所有地址,如下所示:
ENTRYPOINT ["ng", "serve", "-H", "0.0.0.0"]
我最近遇到了这个。为了让它在 Docker 容器中正常工作,您需要在节点应用程序服务器中绑定到 0.0.0.0 而不是 127.0.0.1。例如:
const http = require('http');
const hostname = '0.0.0.0'; // Do not use 127.0.0.1 here
const port = 3000;
const server = http.createServer((req, res) => {
// do stuff
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
My environment:
Ubunut 17.04 LTS
npm --version: 5.6.0
nodejs --version: 4.7.2
angular cli version: 1.6.4
docker-编写文件:
version: '3'
services:
my-app:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
volumes:
- .:/usr/src/app
ports:
- "4200:4200"
我在 docker 文件中注释掉了 EXPOSE 4200,因为我已经从 docker-compose.yml 文件中安装了它,这样不行吗,我应该在 docker文件并挂载到 docker-compose?
运行 命令行上的 npm start 在浏览器上成功启动应用程序,因为我可以转到 localhost:4200
并查看应用程序 运行ning。
但是,如果我使用 docker 和 运行 docker-compose 构建我的应用程序,我看到 nodejs 服务器仍在 运行ning [=16] =],但是,我无法访问应用程序,转到 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[=19 的浏览器上看到该应用程序=]
然后从docker-组成
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.
在您的 docker-compose 文件中,确保导出端口:
services:
node:
ports:
- 4200:4200
好的,正如您在问题中所说,您的进程正在侦听 localhost:4200
上的连接。
在docker容器中,localhost
是容器本身的环回设备的地址,它与您的主机网络是分开的,无法访问。
您需要编辑您的节点进程,以便通过编辑 Dockerfile 中的入口点使其侦听所有地址,如下所示:
ENTRYPOINT ["ng", "serve", "-H", "0.0.0.0"]
我最近遇到了这个。为了让它在 Docker 容器中正常工作,您需要在节点应用程序服务器中绑定到 0.0.0.0 而不是 127.0.0.1。例如:
const http = require('http');
const hostname = '0.0.0.0'; // Do not use 127.0.0.1 here
const port = 3000;
const server = http.createServer((req, res) => {
// do stuff
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});