无法访问本地主机上的 Docker 容器 [重复]
Posted
技术标签:
【中文标题】无法访问本地主机上的 Docker 容器 [重复]【英文标题】:Can’t acces Docker container on localhost [duplicate] 【发布时间】:2022-01-07 21:04:42 【问题描述】:我有一个使用 Angular-cli 的前端应用程序,我正在尝试在将其集成到容器核心之前检查它是否单独工作,但似乎我无法访问本地主机。 我正在使用带有 Docker Desktop 的 macOS Catalina 10.15.7。
这与其他问题不同,因为我在 *** 中提出问题之前已经测试过,所以不要重复,谢谢!!
我的 Dockerfile 是这样构建的:
FROM node:14-alpine3.12
WORKDIR /app/front
#COPY ./angular-cli .
COPY package.json package-lock.json
COPY . .
RUN npm install
RUN npm install -g @angular/cli
EXPOSE 4200
# Angular installation if it fails,
CMD ["ng", "serve"]
当我使用命令运行应用程序时:
docker run -d -p 80:4200 reponame
我的构建完美运行并向我展示了这一点:
** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
Compiled successfully.
当我转到 Localhost:4200 时,它显示该页面不可访问。 我也尝试使用此命令与 IP 地址连接,但同样的事情。
docker inspect -f ‘range .NetworkSettings.Networks.IPAddressend’ imagename
我还尝试更改不同的端口,因为我在 Mac 中读取了端口 80 可能已损坏或某种原因,所以我尝试了:
docker run -d -p 4200:4200 appname
docker run -d -p 8080:4200 appname
如果有人可以帮助我,那真的很棒。 谢谢!
【问题讨论】:
你认为-p 80:4200
会做什么?
将任何流量从应用程序端口发送到 docker 端口?
但是哪些端口?阅读docs.docker.com/engine/reference/commandline/run/…
我的应用程序端口在 4200 到 80,我尝试进入 localhost:80 一样的东西
您需要一个ng serve --host 0.0.0.0
选项。如果服务器在其启动消息中打印出“正在侦听 localhost:12345”,则无法从其自己的容器外部访问它。
【参考方案1】:
您的端口映射似乎与您要实现的目标不正确。 -p 80:4200 表示您将使用主机上的端口 80 来访问应用程序。
所以你应该尝试通过 http://localhost 或 http://localhost:80 来访问它。即使这不起作用,有时您的端口 80 已经绑定到其他应用程序。也许您可以尝试使用其他端口,例如 8080、8888 等,而不是 80。
【讨论】:
正如我提到的,正如你在 http//localhost 中所说的,但如果端口已经被占用,Docker 会告诉我它是,不是吗?【参考方案2】:我假设您在容器中的应用不会通过0.0.0.0
接口公开。
因此,在您的 Angular 应用程序中,将 localhost
上的暴露改为 0.0.0.0
。
更新你的 CMD:
CMD ["ng", "serve", "--host", "0.0.0.0"]
使用 localhost:80
从您的主机系统连接。
【讨论】:
好主意去试试,没想到。 酷,让我知道它是否有效。 嗯似乎不起作用... 你在你的 Dockerfile 中更改了ng serve --host 0.0.0.0
,就像@DavidMaze 提议的那样?
是的,只是在等待构建并告诉你发生了什么,但会问你同样的问题,如果已经在我的 package.json 中指定了它,我应该在我的 Dockerfile 中再做一次吗?以上是关于无法访问本地主机上的 Docker 容器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何从 docker 容器访问 localhost? [复制]