当前位置: 首页 > 面试题库 >

在docker容器中运行时,nodejs应用程序未连接到本地主机

养振濂
2023-03-14
问题内容
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该应用程序并查看其运行情况。

但是,如果我使用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是容器本身的回送设备的地址,该地址与主机网络分开且不可访问。

您需要编辑节点进程,以使其通过编辑Dockerfile中的入口点来侦听所有地址,如下所示:

ENTRYPOINT ["ng", "serve", "-H", "0.0.0.0"]


 类似资料:
  • 我在本地机器上运行MongoDB作为独立服务器。我的快速应用程序可以很好地连接到它,除非它在容器中运行。在我的连接字符串中,我尝试使用我的机器的IP,localhost和127.0.0.1但都没有工作。我还尝试了绑定端口270170.0.0.0在mongo配置文件,但也没有工作。最后,我尝试在docker run命令中使用--net="host"选项,但没有用。这是我运行容器时得到的错误: Mon

  • 问题内容: 我正在运行一个docker mysql映像,以下是docker-compose.yml文件的外观: 这很好。 我的问题是:如何从主机(我的Macbook)上的命令行mysql客户端连接到在该容器上运行的MySQL实例? 澄清: 我有一台装有Docker的Macbook 我有一个带有mysql的docker容器 我想从Macbook的终端连接到上述容器上运行的mysql实例 我不想使用命

  • 问题内容: 我看到很多人都在为此苦苦挣扎,好像在redis容器映像中可能有一个错误,而其他人似乎在追寻类似的问题。 我在DockerHub上使用标准Redis映像。(https://github.com/dockerfile/redis) 像这样运行它: 进入服务器后,就可以启动服务器,并从容器映像进行Redis ping了。 不幸的是,我无法从主机连接到Redis容器。 我已经尝试设置,例如下面

  • 问题内容: 我创建了一个Dockerfile在Docker内部运行Docker: 启动容器并运行docker ps后,我得到:“无法通过unix:///var/run/docker.sock连接到Docker守护程序。Docker守护程序正在运行吗?” 我在容器内执行了命令dockerd: 错误启动守护程序:错误初始化网络控制器:错误获取控制器实例:无法创建NAT链DOCKER:iptables失

  • 我有一个jenkins在docker容器中运行,另一个docker在不同的docker容器中运行。 我已经映射了/var/run/docker。将本地机器的sock文件保存到docker容器中,并且我能够在docker容器中执行docker命令。docker容器和jenkins容器都位于同一网络上。但当从詹金斯连接到docker集装箱时,我的连接被拒绝了。我已将666个权限授予/var/run/d

  • 澄清: 我有一台安装了Docker的macbook 我有一个带有MySQL的docker容器 我想从MacBook上的终端连接到在上述容器上运行的mysql实例 我不想使用命令来实现此操作。相反,我想直接从终端使用客户机(而不通过docker容器隧道进入)。 我没有在本地运行MySQL,所以端口3306应该是打开的,可以随时使用。 我用来启动容器的命令是: