我无法使用 localhost 访问容器中的 Node.js 服务器吗?

问题描述 投票:0回答:3

我实际上正在学习如何使用 Angular 开发一个网站,为了了解更多信息,我们还在学习 Docker,将我们的项目放入容器中。 我们的目标是让 Angular 专门安装在容器上,并通过安装的绑定卷让容器可以访问主机上的代码。

因此,我使用所需内容和 docker-compose.yaml 创建了一个 Dockerfile,因此挂载卷指令直接位于其中(因此我们不需要每次都使用

run
-v
容器)。

服务器完美启动,当我在主机上修改它们时,我的所有文件都会在容器上更改。但是,如果我想从我的主机访问它,我必须使用 Node.js 提供的“网络”IP 来访问它,而不是本地主机 IP,我认为应该如此?

Watch mode enabled. Watching for file changes...
  ➜  Local:   http://localhost:4200/
  ➜  Network: http://another.ip:4200/

我可以使用它,但我想了解为什么它会这样工作,因为我认为这只是我的一些不理解。

这是我的 Dockerfile :

FROM node:latest
WORKDIR /app

RUN npm install -g @angular/cli@16

COPY package.json package-lock.json ./
RUN npm install

EXPOSE 4200

CMD ["ng", "serve", "--host", "0.0.0.0", "--disable-host-check"]

还有我的 docker-compose.yaml :

version: '3.8'
services:
  my-website:
    image: image-of-mywebsite
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/app
    ports:
      - "4200:4200"

它们位于同一个文件夹中,即我的 Angular 项目所在的文件夹中,我使用以下命令运行它

sudo docker compose run my-website

谢谢你帮助我理解。

node.js angular docker docker-compose
3个回答
0
投票

问题可能出在 docker-compose.yaml 中。它运行图像,而不是构建。尝试删除这一行:

image: image-of-mywebsite

然后像这样运行组合:

docker-compose build && docker-compose up

-1
投票

您尝试过

http://0.0.0.0:4200/
http://127.0.0.1:4200/
吗?

您也可以尝试删除 CMD 命令中的

--host
标志,例如:

CMD ["ng", "serve" "--disable-host-check"]


-1
投票

当然,您应该能够从本地主机访问它。如果没有另外指定,docker compose 将创建一个桥接网络,因此您应该能够从本地主机访问它。 桥接网络

你尝试过这样的事情吗?

ng serve --host 0.0.0.0 --port 4200

如果不起作用,我想了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.