我实际上正在学习如何使用 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
谢谢你帮助我理解。
问题可能出在 docker-compose.yaml 中。它运行图像,而不是构建。尝试删除这一行:
image: image-of-mywebsite
然后像这样运行组合:
docker-compose build && docker-compose up
您尝试过
http://0.0.0.0:4200/
或http://127.0.0.1:4200/
吗?
您也可以尝试删除 CMD 命令中的
--host
标志,例如:
CMD ["ng", "serve" "--disable-host-check"]
当然,您应该能够从本地主机访问它。如果没有另外指定,docker compose 将创建一个桥接网络,因此您应该能够从本地主机访问它。 桥接网络
你尝试过这样的事情吗?
ng serve --host 0.0.0.0 --port 4200
如果不起作用,我想了解更多信息。