为什么我不能从主机访问dockerized npm

牙齿医生

设置-我有一个在Docker容器中运行的简单服务器。Dockerfile:

  web:
    image: my_web
    build:
      context: ./
      dockerfile: web.docker
    container_name: my_web
    networks:
      - front
    ports:
      - "4200:4200"
      - "4300:4300"
    volumes:
      - www:/var/www
      - wwwlogs:/var/www/storage/logs
    env_file:
      - ${SERVICE_ENVIRONMENT}.env

web.docker:

# start build from node:latest
FROM node:latest

MAINTAINER me <[email protected]>

# Install system-wide dependencies
RUN apt-get -yqq update

... some unimportant setup stuff ...

USER me

# expose port
EXPOSE 4200

WORKDIR /me

## Run server
CMD ["/bin/bash", "-c", "ng serve --proxy-config projects/my-ui/src/environments/proxy.conf-local.json --hmr"]

所有这一切。服务器启动

...
** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
...

从容器内部,我可以很好地完成服务:

> docker exec -u 0 -it my_web /bin/bash
root@621da3c6697f:/me# curl localhost:4200
<!doctype html>
<html>
<head>
...

但是,从容器外部(OSX主机),我得到一个空响应:

> curl localhost:4200
curl: (52) Empty reply from server

我认为这与Docker网络没有直接关系。我还有其他响应良好的API服务。我还登录了Web容器,并使用python启动了一个简单的Web服务器:

me@621da3c6697f:/me# python -m SimpleHTTPServer 4300
Serving HTTP on 0.0.0.0 port 4300 ...

我可以从主持人那里得到罚款:

> curl localhost:4300
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
...

服务器吐出一个访问日志行:

172.22.0.1 - - [18/Oct/2018 19:56:59] "GET / HTTP/1.1" 200 -

我也进行了更改,以便简单的HTTP服务器在端口4200上运行,但这没有什么区别。

我在想这与npm如何绑定到主机有关(仅侦听对127.0.0.1的请求或类似的请求),但是对于我而言,我无法弄清楚。任何人有任何进一步调试的建议或关于更改npm如何绑定地址的想法?

-编辑-

在不运行任何端口的情况下访问端口也有区别。从主持人:

> curl localhost:4000
curl: (7) Failed to connect to localhost port 4000: Connection refused
> curl localhost:4200
curl: (52) Empty reply from server

因此,它肯定达到了4200的要求,只是服务器拒绝提供任何内容...

牙齿医生

好,弄清楚了-它是如何绑定到主机的。经过一段时间的搜索,终于遇到了这个帖子。NodeJS应用程序在Docker容器中运行时未连接到localhost

长话短说,在ng服务行上指定要绑定的主机IP地址:

--host 0.0.0.0

CMD ["/bin/bash", "-c", "ng serve --host 0.0.0.0 --proxy-config projects/my-ui/src/environments/proxy.conf-local.json --hmr"]

我认为您也可以在angular配置文件中进行设置,但这足以让我暂时取消阻止。

现在它响应来自主机的请求:

> curl localhost:4200
<!doctype html>
<html>
<head>
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能更新npm包依赖关系?

为什么我不能使用npm安装此模块?

什么不能从 NPM 包中导出 JSX

为什么我不能从远程访问我的postgres?

为什么我不能从泛型参数访问属性?

为什么我不能从AsyncTask访问全局变量?

为什么我不能从ActionBar访问本机UINavigationBar?

为什么我不能从类访问脚本变量?

为什么我不能从全局空间使用 react 和 express 库(通过 npm i -g pkgName 安装)但我可以从全局空间使用 react-scripts

Babel不能从npm脚本运行

为什么我的npm dockerfile循环?

为什么 npm 给我这个输出?

为什么不能从对象访问常量?

为什么我不能将 npm 模块发布到 Google Artifact Registry?

为什么我不能安装npm的特定版本,以及如何安装?

为什么我的vue应用在运行`npm run serve`后不能启动?

为什么我不能从我的计算属性访问我的数据函数?

为什么我不能从局域网外部访问我的公共 IP 地址?

为什么我不能从网络外部访问我的Web服务器?

为什么我不能使用eslint-config-rallycoding npm包来填充我的create-react-app项目?

为什么在运行 npm start 时,我收到错误“主机”不被识别为内部或外部命令

不能运行“ npm start”

我安装了什么(NPM)?

为什么我不能从外部查询的子查询中访问定义为“选择 1”的字段?

为什么我不能从 onreadystatechange 处理程序内部访问 xhr 对象?

为什么我不能从远程访问svn服务器?

为什么我不能从Java的内部Thread类访问外部类?

为什么我不能从其他节点IP访问kubernetes容器?

为什么我不能从基类的实例访问受保护的成员?